Bean的生命周期
大致流程: 先创建(new…),然后初始化(赋初值), … ,销毁
这里我们只研究初始化和销毁(创建 使用平常都在用)
- 方法一(适用于:@Bean+返回值方式):
init destroy
xml形式:
- 配置在的属性: init-method=“myInit” destroy-method=“myDestroy”
- 其中myInit和myDestroy是在实体类中自己写的方法名
注解形式:
-
配置@Bean注解的属性:
@Bean(value="stu",initMethod = "myInit",destroyMethod = "myDestroy")
-
__注意:__IoC容器在初始化时,单例时会自动创建对象(构造方法) ->然后才init ->…使用…->当容器关闭(ac.close())时调用destroy
- 方法二(适用于: 三层注解(也叫功能性注解)):
三层注解包含:三层(@Controller,@Service,@Repository[Dao层],@Component)、功能性类
@Component为不确定三层具体用哪个来加入到容器当中时可以用这个代替,也就是说除了那三个特指的类以外都可以用@Component注解,例如功能性类(转换器等)
三层组件: 扫描器 + 三层注解(4个)
JAVA规范 :JSR250
将响应组件加入 @Component注解、 给初始化方法加@PostConstruct、给销毁方法加@PreDestroy
- @PostConstruct:相当于方法一的init
- @PreDestroy:相当于方法一的destroy
注意:如果要获取@Component注解中的bean,那么该Bean的名字就是@Component(value=“xxx”)的value值
- 方法三:实现两个接口:适用于三层组件(扫描器+三层组件)
- InitializingBean初始化
- DisposableBean 销毁
初始化:只需要实现InitializingBean中的afterPropertiesSet()方法
销毁:实现DisposableBean 中的destroy()方法
__问题:__要在Spring IOC容器中操作:操作方式是什么? 对象:Bean+返回 ,三层组件
- 如果是注解形式,随便写一个方法,然后加上相应注解即可
- 如果是接口形式,必须实现接口中规定的方法
- 方法四: (给容器中的所有Bean加初始化、销毁)一个接口
- 接口:适用于三层组件
- 接口BeanPostProcessor:拦截了所有中容器的Bean