Spring基础、IOC、SpringMVC

CSDN博客地址:https://blog.csdn.net/qq_35893033/article/details/128413533

一、常见问题

1. 基础信息

  • 描述:轻量级开发框架,旨在提高开发效率及系统的可维护性。

  • 模块:核心容器、数据访问/集成、Web、AOP、工具、消息、测试模块

  • 特征

    • 核心技术:DI、AOP、events、资源…
    • 数据访问

2. RestController vs Controller

  • 返回

    • Controller 返回一个页面(不加@ResponseBody)

    • RestController 返回对象:JSON或XML数据,对象数据直接写入HTTP响应,属于RESTful Web服务(前后端分离)

3. Spring IoC & AOP

  • IoC:Inverse of Control ,控制反转。[依赖倒置原则][https://www.zhihu.com/question/23277575/answer/169698662]
    • 一种设计思想,将原本在程序中手动创建对象的控制权交由Spring框架来管理。IoC容器是Spring用来实现IOC的载体,Map结构。
    • 类似工厂,当需要创建一个对象时,只需配置好配置文件/注解即可
  • 实现方式
    • DI
  • AOP:Aspect Oriented Programming,面向切面编程。
    • 将与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低耦合度,提高可拓展性和可维护性。
    • 基于动态代理
  • JNDI:Java Naming and Directory Interface,Java命名和目录接口)
    • SUN公司提供的一种标准的Java命名系统接口
    • JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。

4. Spring单例与线程安全

  • @Component和@Bean
    • @Component 作用于类,@Bean作用于方法
  • 将一个类声明为Spring的bean的注解

    • @Component:通用
    • @Repository:持久层,DAO
    • @Service:服务层
    • @Controller:Spring MVC控制层
  • 在类中注入属性对象的注解

    • Autowired:按类型注入
    • Resource:按名称注入
    • Qualifier:与Autowired配合实现按名称注入

5. Spring MVC

  1. Model1时代:JSP为主体
  2. Model2时代:Java Bean(Model)+JSP(View)+Servlet(Controller)–JavaWeb MVC
  3. Spring MVC:对客户端的请求通过后端分层调用方式,将视图数据返回客户端
    1. 浏览器发送请求到后端DispatcherServlet,由Servlet找到对应的Handler类(控制层)
    2. Handler类调用处理器处理相应逻辑,返回ModelAndView(模型视图对象)
    3. ViewResolver(视图解析器)找到View,DisapterServlet将Model传给View,并返回给浏览器进行渲染

二、IOC

获得依赖对象的过程被反转了

1.DI:dependency Injection(依赖注入)

  • 描述:由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。即将实例变量传入到一个对象中去。
  • 理解
    • 找IOC容器==>容器返回对象==>使用对象
    • 房屋中介(找中介==>中介介绍房子==>租房入住)

2.Bean配置

  • 描述:在Spring中,每一个对象都是一个bean

  • 使用方式

    • 注解

    • xml配置

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      <!-- 设值注入 -->
      <bean id="userService" class="com.mango.service.UserService" >
      <property name="userDAO" ref="userDAO"></property>
      </bean>
      <!-- 构造注入 -->
      <bean id="userService" class="com.mango.service.UserService" >
      <constructor-arg name="userDAO" ref="userDAO"></constructor-arg>
      </bean>

      <bean id="userDAO" class="com.mango.dao.UserDAO"></bean>
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      public class UserServiceImpl implements UserService{

      private UserDAO userDAO;

      // 构造注入
      public UserServiceImpl(UserDAO userDAO){
      this.userDAO = userDAO;
      }

      // 设值注入
      public void setUserDAO(UserDAO userDAO){
      this.userDAO = userDAO;
      }

      }
  • 配置项

    • Id
    • Class
    • scope
  • 作用域

    • singleton:单例,指一个Bean容器中只能存在一份,默认

    • prototype:每次请求(每次使用)创建新的实例,destroy方式不生效

    • request:每次http请求创建一个实例且仅在当前request内有效

    • session:同上,每次http请求创建,当前session内有效

    • global session:基于portlet的web中有效,如果在web中,同session

------ 本文结束感谢您的阅读 ------

本文标题:Spring基础、IOC、SpringMVC

文章作者:MangoCheng

发布时间:2022年12月22日 - 20:57:33

最后更新:2023年04月10日 - 17:49:13

原始链接:http://mangocheng.com/posts/6c92115f.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。