一、Spring Bean的概念
Spring bean通常来说是指被Spring容器所管理的java对象;而spring容器就是负责实例化、配置和装配Spring bean;
二、Spring Bean容器
Spring Bean容器可以获取Spring Bean,通过BeanFacroty接口或ApplicationContext接口,两者的区别在于Application继承自BeanFacrory接口,所以Application包含了Beanfactory的所有功能以及拓展了更多功能,而且BeanFactory是懒加载的,ApplicationContext是预加载;
三、实例化SpringBean
Spring提供了三种初始化方式
1.实现InitializingBean接口
public interface InitializingBean{
void afterPropertiesSet() throws Exception;
}
2.@PostConstruct,通常将注解放在方法上
@PostConstrcut
public void init(){
System.out.println("init method...");
}
3.init-method
public class MyClass{
public void init(){
System.out.println("init method...");
}
}
@Configuration
public class AppConfig{
@Bean(initMethod="init")
public MyClass myclass(){
return new MyClass();
}
}
或者是这种xml配置
<bean id="myClass" class="com.demo.Myclass" init-method="init" />
这三种初始化方式在框架中组合使用,调用顺序是@PostContruct会被最先调用,其次是InitializingBean.afterPropertiesSet()方法,最后是调用通过xml配置的init-method方法或者设置@Bean注解设置的initMethod方法;
而在实例化Spring Bean之前会有两个回调方法,这个好理解,就好像页面加载一样,有生命周期函数,而这个生命周期函数的实现就是BeanPostProcessor接口,BeanPostProcessor有两个方法,分别是postProcessorBeforeInitialization和postProcessorAfterInitialization;
所以到目前为止,我们知道的Spring Bean的生命周期函数就是如下这种情况;
四、Spring Bean的销毁
既然有创建就会有销毁,否则就是滥用内存,当Spring移除bean时,相关回调方法如下;
我们知道初始化又@PostConsruct、InitializingBean.afeterPropertiesSet()、init-method三种方式,那么对应这三种创建方式便会有三种对应的销毁方式,具体如下;
1.DisposableBean
2.@PreDestory
3.destory-mthod
组合使用调用顺序是@PreDestory、DisposabelBean.destory()、调用XML配置的destory-method方法或者是@Bean注解设置的饿destoryMethod属性的方法
自此我们知道的Spring Bean的生命周期就更加全面了,具体流程如下