对象注入(从容器中将对象读出来)
- 属性注入
- 构造方法注入
- Setter注入
属性注入
通过构造方法进行属性注入
如果当前类中只存在一个构造方法,那么 @Autowried 可以省略
setter 注入
属性注入和构造注入,Setter 注入的区别
- 属性注入特点写法简单。通用性不好,只能运行在Ioc容器中,如果是非Ioc容器就会出现问题。
- Setter 注入:早期Spring推荐写法,Setter 注入通用性没有构造方法注入通用。
- 构造方法注入:通用性更好,他能确定在使用注入方法之前,注入对象一定是被初始化过的。此方法也是Spring后期推荐方法。
@Autowired和@Resource区别:
- @Resource是JDK提供的注解,@Autowired是Spring框架提供的。
- 用法不同:@Resource支持属性注入,构造方法和Setter注入,@Autowired不支持构造方法注入。
- 支持的参数不同:@Resource支持更多的参数,比如 name,type设置,而@Autowired支支持 required 参数。
Bean 作用域:
- singleton 单例模式(默认)
- prototype 原型模式 (多例模式)
- request: 请求作用域(SpringMvc)
- session:会话作用域(SpringMvc)
- application:全局作用域(SpringMvc)
- websocket:HTTP Websocker作用域(Spring Websocket)
使用 @Scope 设置作用域
@Scope("prototype")
@Scope("ConfigurableBeanFactory.SCOPE_PROTTYPE")
Bean生命周期
-
实例化(给Bean分配内存空间)
-
设置属性(对象注入)
- 执行各种通知
- 执行初始化方法的前置方法
- 执行构造方法
- 执行初始化方法的后置方法
-
初始化
-
使用 Bean
-
销毁Bean
- @PreDestroy
- 重写 DisposableBean接口
- destroy-method