Spring对象注入

124 阅读1分钟

对象注入(从容器中将对象读出来)

  • 属性注入
  • 构造方法注入
  • Setter注入

属性注入

test20230520192247.png

通过构造方法进行属性注入

12332120192456.png

如果当前类中只存在一个构造方法,那么 @Autowried 可以省略

setter 注入

1110230520192846.png

属性注入和构造注入,Setter 注入的区别

  • 属性注入特点写法简单。通用性不好,只能运行在Ioc容器中,如果是非Ioc容器就会出现问题。
  • Setter 注入:早期Spring推荐写法,Setter 注入通用性没有构造方法注入通用。
  • 构造方法注入:通用性更好,他能确定在使用注入方法之前,注入对象一定是被初始化过的。此方法也是Spring后期推荐方法。

@Autowired和@Resource区别:

  • @Resource是JDK提供的注解,@Autowired是Spring框架提供的。
  • 用法不同:@Resource支持属性注入,构造方法和Setter注入,@Autowired不支持构造方法注入。
  • 支持的参数不同:@Resource支持更多的参数,比如 name,type设置,而@Autowired支支持 required 参数。

Bean 作用域:

  1. singleton 单例模式(默认)
  2. prototype 原型模式 (多例模式)
  3. request: 请求作用域(SpringMvc)
  4. session:会话作用域(SpringMvc)
  5. application:全局作用域(SpringMvc)
  6. websocket:HTTP Websocker作用域(Spring Websocket)

使用 @Scope 设置作用域

@Scope("prototype")

@Scope("ConfigurableBeanFactory.SCOPE_PROTTYPE")

Bean生命周期

  1. 实例化(给Bean分配内存空间)

  2. 设置属性(对象注入)

    • 执行各种通知
    • 执行初始化方法的前置方法
    • 执行构造方法
    • 执行初始化方法的后置方法
  3. 初始化

  4. 使用 Bean

  5. 销毁Bean

    • @PreDestroy
    • 重写 DisposableBean接口
    • destroy-method