Spring中bean的生命周期---在ApplicationContext中
2013-04-24 11:39
323 查看
bean被载入到容器中时,他的生命周期就开始
了。bean工厂在一个bean可以使用前完成很多
工作:
1.容器寻找bean的定义信息并实例化。
2.使用依赖注入,spring按bean定义信息配置bean的所有属性。
3.若bean实现了BeanNameAware接口,工厂调用Bean的setBeanName
()方法传递bean的ID。
4.若bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()
方法传入工厂自身。
5.若BeanPostProcessor和bean关联,则它们的
postProcessBeforeInitialization()方法被调用。
6.若bean指定了ini-method方法、,它将被调用。
7.最后,若有BeanPostProcessor和bean关联,则它们的
postProcessAfterInitialization()方法被调用、。
代码说明Spring中bean的生命周期
1、创建一个实体bean
2、
创建BeanPostProcessor实现类
3、
在配置文件中配置实体Bean和BeanPostProcessorImpl特殊的Bean
4、测试类
在BeanFactory中bean的生命周期测试
了。bean工厂在一个bean可以使用前完成很多
工作:
1.容器寻找bean的定义信息并实例化。
2.使用依赖注入,spring按bean定义信息配置bean的所有属性。
3.若bean实现了BeanNameAware接口,工厂调用Bean的setBeanName
()方法传递bean的ID。
4.若bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()
方法传入工厂自身。
5.若BeanPostProcessor和bean关联,则它们的
postProcessBeforeInitialization()方法被调用。
6.若bean指定了ini-method方法、,它将被调用。
7.最后,若有BeanPostProcessor和bean关联,则它们的
postProcessAfterInitialization()方法被调用、。
代码说明Spring中bean的生命周期
1、创建一个实体bean
packagewww.csdn.spring1.dao; importorg.springframework.beans.BeansException; importorg.springframework.beans.factory.BeanFactory; importorg.springframework.beans.factory.BeanFactoryAware; importorg.springframework.beans.factory.BeanNameAware; importorg.springframework.beans.factory.DisposableBean; importorg.springframework.beans.factory.InitializingBean; publicclassHelloWordDaoImplimplementsHelloWordDao,BeanNameAware,BeanFactoryAware,InitializingBean,DisposableBean{ privateStringcontext; publicvoidsetContext(Stringcontext){ System.out.println("----"+context); this.context=context; } publicvoidclose(){ System.out.println("关闭操作"); } publicvoidinit(){ System.out.println("初始化操作"); } @Override publicvoidsayHello(){ System.out.println("不管与你的路有多苦----不管有多苦。那英---daoImpl"); } @Override publicvoidsetBeanName(StringbeanId){ System.out.println("输出beanName"+beanId); } @Override publicvoidsetBeanFactory(BeanFactoryfactory)throwsBeansException{ System.out.println("输出factory"+factory.getClass()); } @Override publicvoidafterPropertiesSet()throwsException{ System.out.println("afterPro"); } @Override publicvoiddestroy()throwsException{ System.out.println("销毁的操作"); } }
2、
创建BeanPostProcessor实现类
packagewww.csdn.spring1.dao; importorg.springframework.beans.BeansException; importorg.springframework.beans.factory.config.BeanPostProcessor; publicclassBeanPostProcessorImplimplementsBeanPostProcessor{ @Override publicObjectpostProcessAfterInitialization(Objectbean,StringbeanName) throwsBeansException{ System.out.println("初始化之后"+beanName); returnbean; } @Override publicObjectpostProcessBeforeInitialization(Objectbean,StringbeanName) throwsBeansException{ System.out.println("初始化之前"+beanName); returnbean; } }
3、
在配置文件中配置实体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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"> <beanid="helloWordDaoImpl"class="www.csdn.spring1.dao.HelloWordDaoImpl"scope="singleton"lazy-init="default" init-method="init"destroy-method="destroy" > <propertyname="context"value="我不会"></property> </bean> <beanid="beanPostProcessorImpl"class="www.csdn.spring1.dao.BeanPostProcessorImpl"></bean> </beans>
4、测试类
packagewww.csdn.spring1.bean.cyle; importorg.junit.Test; importorg.springframework.beans.factory.config.ConfigurableBeanFactory; importorg.springframework.beans.factory.xml.XmlBeanFactory; importorg.springframework.context.ApplicationContext; importorg.springframework.context.ConfigurableApplicationContext; importorg.springframework.context.support.ClassPathXmlApplicationContext; importorg.springframework.core.io.ClassPathResource; importwww.csdn.spring1.dao.BeanPostProcessorImpl; importwww.csdn.spring1.dao.HelloWordDaoImpl; publicclassBeanDemoTest{ //ApplicationContext中bean的生命周期 @Test publicvoidtest()throwsException{ ApplicationContextcontext=newClassPathXmlApplicationContext("classpath:spring_dao.xml"); ConfigurableApplicationContextcont=(ConfigurableApplicationContext)context; cont.close(); } }
在BeanFactory中bean的生命周期测试
packagewww.csdn.spring1.bean.cyle;
importorg.junit.Test;
importorg.springframework.beans.factory.config.ConfigurableBeanFactory;
importorg.springframework.beans.factory.xml.XmlBeanFactory;
importorg.springframework.context.ApplicationContext;
importorg.springframework.context.ConfigurableApplicationContext;
importorg.springframework.context.support.ClassPathXmlApplicationContext;
importorg.springframework.core.io.ClassPathResource;
importwww.csdn.spring1.dao.BeanPostProcessorImpl;
importwww.csdn.spring1.dao.HelloWordDaoImpl;
publicclassBeanDemoTest{
//BeanFactory中bean的生命周期
@Test
publicvoidtest2(){
//创建资源对象
ClassPathResourceresource=newClassPathResource("spring_dao.xml");
//采用BeanFactory初始化容器
ConfigurableBeanFactorycbf=newXmlBeanFactory(resource);
//bean后置处理器必须通过addBeanPostProcessor(newBeanPostProcessorImpl())手动添加
cbf.addBeanPostProcessor(newBeanPostProcessorImpl());
cbf.getBean("helloWordDaoImpl",HelloWordDaoImpl.class);
cbf.destroySingletons();
}
}
相关文章推荐
- Spring bean生命周期
- Spring IOC -bean对象的生命周期详解
- Spring中Bean的生命周期
- Spring核心技术(六)——Spring中Bean的生命周期
- 【Spring】 Spring容器中Bean的生命周期
- Spring 容器中Bean的生命周期
- Spring学习-08:Bean的生命周期
- spring中Bean的生命周期总结
- Spring Bean 生命周期
- SpringBean生命周期详解
- JAVA面试题:Spring中bean的生命周期
- Spring中bean的生命周期
- Spring中Bean的生命周期
- spring学习(-)关于bean的生命周期
- Spring自动装配及bean的生命周期
- (3)Spring的三种实例 bean 的方式 以及 Spring中bean的作用域。 以及 bean的生命周期
- Spring中Bean的生命周期
- 7.1.【Spring学习】Bean生命周期
- Spring bean 的生命周期
- Spring的Bean的生命周期(三)