Bean的生命周期:初始化,创建并使用,销毁。
现在来说说四种完成Bean生命周期的方法:
方法一:
适用于 Bean()+返回值的方式 -->返回值给Ioc容器
init()初始化 destory()销毁
xml配置:init-method="xxx" destory-method="xxx"
注解形式:@Bean(value="xxx",initMethod="xxx",destoryMethod="xxx")
注意:Ioc容器在初始化是会自动创建对象(构造方法)-->init-->使用-->当Ioc容器关闭时,调用destory....
Ioc容器的生命周期:初始化容器-->使用容器-->销毁容器
Bean的生命周期:创建(new....<这里当然也可以赋值>)-->初始化(赋初值...)-->销毁(一定注意是先创建再初始化,初始化的时候可能会覆盖创建时的数据)
-------------------------------------------------------------------------------------------------------------------
方法二:
适用于有三层注解的地方(功能性注解):@Controller @Service @Repository @Component
三层组件:扫描器+三层注解
Java规范:JSR250
@PostConstruct -->相当于方法一的init
@PostDestory -->相当于方法一的destroy
具体实现过程:将响应组件加入@Component注解,给初始化方法加@PostConstruct,给销毁方法加@ProDestroy
如果要获取@Component中的Bean,那么该Bean的id就是@Component(value=“xxx”)中value的值
-------------------------------------------------------------------------------------------------------------------
方法三:
接口形式,适用于(扫描器+三层组件)的模式-->两个接口
实现InitializingBean接口中的afterPropertiesSet()方法来初始化Bean
实现DisposableBean接口中的destroy()方法来销毁Bean
注意:如果是注解形式,方法名任意,只要加上相应注解就可以(方法二)
如果是接口形式,必须实现接口中规定的方法(方法名不能随便写)
-------------------------------------------------------------------------------------------------------------------
方法四:
接口形式,也适用于(扫描器+三层组件)的模式,与方法三不同的是,它只要实现-->一个接口
这个接口:BeanPostProcessor,但要注意这个接口相当于一个拦截器,会拦截所有容器中的Bean
当然如果要操作指定的bean的话,可以用instanceof来选出来,再对其进行操作: