您的位置:首页 > 移动开发

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

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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: