Spring(3)Bean的生命周期
2017-05-07 15:26
267 查看
1 实例化
当我们程序加载applicationContext.xml文件的时候(scope为singleton情况),把我们的bean实例化到内存中;默认使用无惨构造方法,初始化实例对象(所以一般都必须有一个无参构造方法);
2 调用setter方法设置属性
3 如果bean类实现了BeanNameAware接口,可以通过setBeanName方法获取bean的id号
public class UpperLetter implements BeanNameAware { // 该方法可以给arg0表示正在被实例化的bean对象的id public void setBeanName(String arg0) { System.out.println("setBeanName 方法调用 " + arg0); } }
4 如果bean类实现了BeanFactoryAware 接口,可以通过setBeanFactory方法获取BeanFactory
public class UpperLetter implements BeanFactoryAware { // 该方法可以传递BeanFactory public void setBeanFactory(BeanFactory arg0) throws BeansException { System.out.println("setBeanFactory 方法调用 " + arg0); } }
5 如果bean类实现了ApplicationContextAware接口,可以通过setApplicationContext方法获取ApplicationContext
public class UpperLetter implements ApplicationContextAware{ // 该方法可以传递setApplicationContext上下文 public void setApplicationContext(ApplicationContext arg0) throws BeansException { System.out.println("setApplicationContext 方法调用 " + arg0); } }
6 如果bean和一个后置处理器(BeanPostProcessor)关联,则会自动调用处理器的postProcessBeforeInitialization 方法
①记录每个对象,被实例化的时间②过滤每个调用对象ip
③给所有对象添加属性,或者函数==>aop(Aspect Oriented Programming面向切面编程,针对所有对象编程)
public class MyBeanPostProcessor implements BeanPostProcessor { public Object postProcessAfterInitialization(Object arg0, String arg1) throws BeansException { System.out.println("postProcessAfterInitialization 方法调用 " + arg0 + " " + arg1 + " " + new Date()); return arg0; } public Object postProcessBeforeInitialization(Object arg0, String arg1) throws BeansException { System.out.println("postProcessBeforeInitialization 方法调用 " + arg0 + " " + arg1 + " " + new Date()); return arg0; } }
<!-- applicationContext.xml中配置后置处理器,类似于filter --> <bean id="myBeanPostProcessor" class="com.test.service.imp.MyBeanPostProcessor" />
7 如果bean类实现了InitializingBean接口,则会调用afterPropertiesSet方法
8 定制自己的init方法(在applicationContext.xml文件,init-method)
<bean id="changeLetter" init-method="init" class="com.test.service.imp.UpperLetter"> </bean>
public void init() { System.out.println("自己配置的init 方法调用 "); }
9 调用处理器的postProcessAfterInitialization 方法
10 使用Bean对象,调用bean对象的方法
11 容器关闭
可以通过实现DisposableBean接口,调用destroy方法;也可以在applicationContext.xml文件中配置destroy-method,实现自己的myDestroy方法(常用自己配置的方法)public class UpperLetter implements DisposableBean{ // 关闭数据库连接,socket连接,文件流,释放bean资源 public void destroy() throws Exception { System.out.println("自己配置的init 方法调用 "); } }
<bean id="changeLetter" destroy-method="mydestroy" class="com.test.service.imp.UpperLetter"> </bean>
public void mydestroy() { System.out.println("自己配置的mydestroy 方法调用 "); }
12 小结:一般使用到的流程是1->2->6->9->10->11
相关文章推荐
- 详解Spring-Bean生命周期实例
- Spring 容器中 Bean 的生命周期
- spring中bean的生命周期
- Spring容器-Bean的生命周期
- Java面试之Spring的bean的生命周期
- Spring Bean 生命周期管理
- Spring4深入理解IOC&DI03----Bean配置--SpEL,IOC 容器中 Bean 的生命周期
- Spring中Bean的生命周期
- Spring管理bean的生命周期
- Spring核心--bean的生命周期
- Spring中Bean的生命周期
- Spring学习(6)--Spring中bean的生命周期
- Bean在Spring容器中的生命周期
- Spring、Bean的生命周期
- spring bean 的生命周期
- 如果监控Spring Bean生命周期
- Spring中Bean的生命周期及其扩展点
- spring bean的生命周期三种控制方法
- Spring中BeanFactory和ApplicationContext的生命周期及其区别详解
- Spring《二》 Bean的生命周期