二、初始化与销毁
初始化:bean在被创建好,并赋值好后,才会被初始化
销毁: 单例bean在ioc容器被销毁时会被销毁,而多例bean需要手动销毁
方式1:@Bean属性
@Bean注解有两个属性
| 属性名 | 作用 |
|---|---|
| initMethod | bean的初始化方法名 |
| destroyMethod | bean的销毁方法名 |
方式2: 实现接口
让类实现InitializingBean与DisposableBean接口表明,该类创建的bean需要被初始化与销毁
方式3:JSR250注解
在类的方法上标注@PostConstruct注解表示该方法为bean的初始化方法,@PreDestroy为销毁方法
特殊:BeanPostProcessor
若需要更加细致的bean创建环节,例如在bean的初始化前后做一些工作,就实现BeanPostProcessor接口
单例非懒加载bean的创建过程:
- 构造器创建
- 属性赋值(非自动装配)
- 所有
BeanPostProcessor的postProcessBeforeInitialization方法 - 初始化
- 所有
BeanPostProcessor的postProcessAfterInitialization方法 - 使用bean
- 销毁
往ioc容器中添加该类的实现类,其中的方法会在指定bean的初始化前后被调用。详见BeanPostProcessor
要注意的是,在postProcessBeforeInitialization方法或postProcessAfterInitialization方法中返回null,将会导致后面所有的BeanPostProcessor中的剩余的对应的未执行方法无法得到执行。
Spring底层经常使用BeanPostProcessor来处理bean类中的注解,如@Autowired注入,@PostConstruct初始化等