spring中在ApplicationContext或在BeanFactory中Bean的生命周期总结
Spring中Bean的生命周期,在学习spring的过程中bean的生命周期理解对学习spring有很大的帮助,下面我就分别介绍在ApplicationContext和BeanFactory中Bean的生命周期。
1、在ApplicationContext中Bean的生命周期
生命周期执行的过程如下:
1、需找所有的bean根据bean定义的信息来实例化bean
2、使用依赖注入,spring按bean定义信息配置bean的所有属性
3、若bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递bean的ID。
4、若bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身。
5、若bean实现了ApplicationContextAware()接口,setApplicationContext()方法会被调用
6、若BeanPostProcessor和bean关联,
则它们的postProcessBeforeInitialization()方法被调用
7、若bean指定了init-method="init"方法、,它将被调用。
8、若有BeanPostProcessor和bean关联,
则它们的postProcessAfterInitialization()方法被调用
注意:通过已上操作,此时的Bean就可以被应用的系统使用,并讲保留在BeanFactory工厂中直到不再需要为止.但我们也可以通过9或者10进行销毁
9、若bean实现了DisposableBean接口,distroy()方法被调用
10、如果指定了destroy-method="close"定制的销毁方法,就调用这个方法
案例分析:
创建一个实体Bean代码如下:
创建BeanPostProcessor实现类
-
packagewww.csdn.spring.dao;
-
-
-
importorg.springframework.beans.BeansException;
-
-
importorg.springframework.beans.factory.config.BeanPostProcessor;
-
-
-
publicclassBeanPostProcessorImplimplementsBeanPostProcessor{
-
-
@Override
-
-
publicObjectpostProcessBeforeInitialization(Objectbean,StringbeanName)
-
-
throwsBeansException{
-
-
System.out.println("我把:"+beanName+"实例化化之前的操作");
-
-
returnbean;
-
-
}
-
-
-
@Override
-
-
publicObjectpostProcessAfterInitialization(Objectbean,StringbeanName)
-
-
throwsBeansException{
-
-
System.out.println("我把:"+beanName+"实例化化之后的操作");
-
-
returnbean;
-
-
}
-
-
-
}
在配置文件中配置实体Bean和BeanPostProcessorImpl特殊的Bean
-
<?xmlversion="1.0"encoding="UTF-8"?>
-
-
<beansxmlns="http://www.springframework.org/schema/beans"
-
-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-
-
xsi:schemaLocation="http://www.springframework.org/schema/beans
-
-
http://www.springframework.org/schema/beans/spring-beans.xsd">
-
-
-
-
-
-
<beanid="helloDaoImpl"class="www.csdn.spring.dao.HelloDaoImpl"
-
-
scope="singleton"lazy-init="false"init-method="init"destroy-method="close">
-
-
-
-
<propertyname="content"value="陈老师早上好!"/>
-
-
</bean>
-
-
-
-
-
<beanclass="www.csdn.spring.dao.BeanPostProcessorImpl"/>
-
-
-
</beans>
创建测试类BeanTest
-
packagewww.csdn.spring.bean.cycle;
-
-
-
importorg.junit.Test;
-
-
importorg.springframework.context.ApplicationContext;
-
-
importorg.springframework.context.ConfigurableApplicationContext;
-
-
importorg.springframework.context.support.ClassPathXmlApplicationContext;
-
-
-
publicclassBeanTest{
-
-
-
@Test
-
-
publicvoidtest(){
-
-
ApplicationContextcontext=newClassPathXmlApplicationContext(
-
-
"classpath:spring-dao.xml");
-
-
-
-
ConfigurableApplicationContextcont=(ConfigurableApplicationContext)context;
-
-
-
-
cont.close();
-
-
-
}
-
-
}
执行结果如下:
总结:在ApplicationContext中Bean的生命周期
2、在BeanFactory中Bean的生命周期
在BeanFactory中Bean的生命周期与ApplicationContext中bean的生命周期唯一不同的是:若bean实现了ApplicationContextAware()接口,在ApplicationContext中bean的生命周期中setApplicationContext()方法会被调用,而在BeanFactory中Bean的生命周期此方法不会被调用。
案例采用上个案例:测试类中测试代码如下:
-
-
-
ClassPathResourceresource=newClassPathResource("spring-dao.xml");
-
-
-
-
ConfigurableBeanFactorycbf=newXmlBeanFactory(resource);
-
-
-
-
cbf.addBeanPostProcessor(newBeanPostProcessorImpl());
-
-
-
-
-
-
cbf.getBean("helloDaoImpl",HelloDaoImpl.class);
-
-
-
-
cbf.destroySingletons();
执行结果:
总结:在BeanFactory中Bean的生命周期
另外说明:
应用上下文与bean工厂的另一个重要区别是关于单例bean如何被加载。
bean工厂延迟加载所有bean,直到getBean()方法被调用。
应用上下文会在启动后预载入所有单例bean.这样可确保应用不需要等待他们被创建。
分享到:
相关推荐
spring的创建详解图片,仅供参考
Spring bean生命周期demo
spring bean 的生命周期,把运行结果的日志,用sublime打开对比查看,你会有比较清晰的认识
弹簧生命周期 一个用于试验 spring 生命周期的小示例应用程序
Springbean生命周期
XXL-JOB学习 xxl-job主流分析,包含调度客户端任务自动注册,服务端内部调度线程调度分析 开源源码赏析,代码分析,spring启动流程分析 Java多线程,线程池启停,设计模式分析
主要介绍了Spring生命周期回调与容器扩展详解,具有一定借鉴价值,需要的朋友可以参考下。
此资源是我的博客bean的生命周期的测试代码,只有源代码,没有相关库文件,环境是spring4.2 ,
SpringBean的生命周期.mdj
主要给大家介绍了Spring中Bean的生命周期和作用域及实现方式的相关资料,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
本文主要介绍 Spring IoC 容器如何管理 Bean 的生命周期。 在应用开发中,常常需要执行一些特定的初始化工作,这些工作都是相对比较固定的,比如建立数据库连接,打开网络连接等,同时,在结束服务时,也有一些相对...
第二十章:Spring 应用上下文生命周期小马哥 · mercyblitzSpring 应用上下文生命周期Spring 应用上下文启动准备阶段BeanFacto
主要介绍了通过实例解析spring对象生命周期,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
学习Spring过程中,使用Eclipse调试Spring源码的关键断点文件。
Spring管理的Bean的生命周期
主要介绍了Spring bean生命周期配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要给大家介绍了关于Spring与bean有关的生命周期的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Spring具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
这个工程主要实现了: Spring中Bean的生命周期 applicationcontext的应用(实现国际化,事件的传递)
NULL 博文链接:https://cdxs2.iteye.com/blog/1941613
NULL 博文链接:https://shmilyaw-hotmail-com.iteye.com/blog/2397403