spring 的bean的配置

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

  1. package www.csdn.spring1.dao; 
  2.  
  3. import org.springframework.beans.BeansException; 
  4. import org.springframework.beans.factory.BeanFactory; 
  5. import org.springframework.beans.factory.BeanFactoryAware; 
  6. import org.springframework.beans.factory.BeanNameAware; 
  7. import org.springframework.beans.factory.DisposableBean; 
  8. import org.springframework.beans.factory.InitializingBean; 
  9.  
  10. publicclass HelloWordDaoImpl implements HelloWordDao,BeanNameAware,BeanFactoryAware,InitializingBean,DisposableBean { 
  11.  
  12.     private String context; 
  13.  
  14.     publicvoid setContext(String context) { 
  15.         System.out.println("----" + context); 
  16.         this.context = context; 
  17.     } 
  18.      
  19.     publicvoid close(){ 
  20.         System.out.println("关闭操作"); 
  21.     } 
  22.      
  23.     publicvoid init(){ 
  24.         System.out.println("初始化操作"); 
  25.     } 
  26.  
  27.     @Override 
  28.     publicvoid sayHello() { 
  29.         System.out.println("不管与你的路有多苦----不管有多苦。那英---daoImpl"); 
  30.     } 
  31.      
  32.      
  33.     @Override 
  34.     publicvoid setBeanName(String beanId) { 
  35.         System.out.println("输出beanName"+beanId); 
  36.          
  37.     } 
  38.  
  39.     @Override 
  40.     publicvoid setBeanFactory(BeanFactory factory) throws BeansException { 
  41.         System.out.println("输出factory"+factory.getClass()); 
  42.          
  43.     } 
  44.      
  45.     @Override 
  46.     publicvoid afterPropertiesSet() throws Exception { 
  47.         System.out.println("afterPro"); 
  48.          
  49.     } 
  50.  
  51.     @Override 
  52.     publicvoid destroy() throws Exception { 
  53.         System.out.println("销毁的操作"); 
  54.          
  55.     } 
package www.csdn.spring1.dao;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

public class HelloWordDaoImpl implements HelloWordDao,BeanNameAware,BeanFactoryAware,InitializingBean,DisposableBean {

	private String context;

	public void setContext(String context) {
		System.out.println("----" + context);
		this.context = context;
	}
	
	public void close(){
		System.out.println("关闭操作");
	}
	
	public void init(){
		System.out.println("初始化操作");
	}

	@Override
	public void sayHello() {
		System.out.println("不管与你的路有多苦----不管有多苦。那英---daoImpl");
	}
	
	
	@Override
	public void setBeanName(String beanId) {
		System.out.println("输出beanName"+beanId);
		
	}

	@Override
	public void setBeanFactory(BeanFactory factory) throws BeansException {
		System.out.println("输出factory"+factory.getClass());
		
	}
	

	@Override
	public void afterPropertiesSet() throws Exception {
		System.out.println("afterPro");
		
	}

	@Override
	public void destroy() throws Exception {
		System.out.println("销毁的操作");
		
	}
}

 

2、

创建BeanPostProcessor实现类

  1. package www.csdn.spring1.dao; 
  2.  
  3. import org.springframework.beans.BeansException; 
  4.  
  5. import org.springframework.beans.factory.config.BeanPostProcessor; 
  6.  
  7. publicclass BeanPostProcessorImpl implements BeanPostProcessor { 
  8.  
  9.     @Override 
  10.     public Object postProcessAfterInitialization(Object bean, String beanName) 
  11.             throws BeansException { 
  12.         System.out.println("初始化之后" + beanName); 
  13.         return bean; 
  14.     } 
  15.  
  16.     @Override 
  17.     public Object postProcessBeforeInitialization(Object bean, String beanName) 
  18.             throws BeansException { 
  19.         System.out.println("初始化之前" + beanName); 
  20.         return bean; 
  21.     } 
  22.  
package www.csdn.spring1.dao;

import org.springframework.beans.BeansException;

import org.springframework.beans.factory.config.BeanPostProcessor;

public class BeanPostProcessorImpl implements BeanPostProcessor {

	@Override
	public Object postProcessAfterInitialization(Object bean, String beanName)
			throws BeansException {
		System.out.println("初始化之后" + beanName);
		return bean;
	}

	@Override
	public Object postProcessBeforeInitialization(Object bean, String beanName)
			throws BeansException {
		System.out.println("初始化之前" + beanName);
		return bean;
	}

}

3、

在配置文件中配置实体BeanBeanPostProcessorImpl特殊的Bean

  1. <?xmlversion="1.0"encoding="UTF-8"?> 
  2. <beansxmlns="http://www.springframework.org/schema/beans" 
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.        xsi:schemaLocation="http://www.springframework.org/schema/beans 
  5.            http://www.springframework.org/schema/beans/spring-beans.xsd"> 
  6.        
  7.  
  8.    <beanid="helloWordDaoImpl"class="www.csdn.spring1.dao.HelloWordDaoImpl"scope="singleton"lazy-init="default" 
  9.     
  10.         init-method="init"destroy-method="destroy" 
  11.    > 
  12.         <propertyname="context"value="我不会"></property> 
  13.    </bean>  
  14.    <beanid="beanPostProcessorImpl"class="www.csdn.spring1.dao.BeanPostProcessorImpl"></bean> 
  15. </beans> 
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="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">
      

   <bean id="helloWordDaoImpl" class="www.csdn.spring1.dao.HelloWordDaoImpl" scope="singleton" lazy-init="default"
   
   		init-method="init" destroy-method="destroy"
   >
   		<property name="context" value="我不会"></property>
   </bean> 
   <bean id="beanPostProcessorImpl" class="www.csdn.spring1.dao.BeanPostProcessorImpl"></bean>
</beans>

4、测试类

  1. <preclass="java"name="code">package www.csdn.spring1.bean.cyle; 
  2.  
  3. import org.junit.Test; 
  4. import org.springframework.beans.factory.config.ConfigurableBeanFactory; 
  5. import org.springframework.beans.factory.xml.XmlBeanFactory; 
  6. import org.springframework.context.ApplicationContext; 
  7. import org.springframework.context.ConfigurableApplicationContext; 
  8. import org.springframework.context.support.ClassPathXmlApplicationContext; 
  9. import org.springframework.core.io.ClassPathResource; 
  10.  
  11. import www.csdn.spring1.dao.BeanPostProcessorImpl; 
  12. import www.csdn.spring1.dao.HelloWordDaoImpl; 
  13.  
  14.  
  15.  
  16.  
  17.  
  18. public class BeanDemoTest { 
  19.  
  20.     //ApplicationContext中bean的生命周期 
  21.     @Test 
  22.     public void test() throws Exception{ 
  23.         ApplicationContext context=new ClassPathXmlApplicationContext("classpath:spring_dao.xml"); 
  24.         ConfigurableApplicationContext cont = (ConfigurableApplicationContext) context;   
  25.          
  26.         cont.close(); 
  27.          
  28.     } 
  29.      
  30. </pre><br> 
  31. <pre></pre> 
  32. <preclass="html"name="code"></pre> 
  33. <p>在BeanFactory中bean的生命周期测试</p> 
  34. <p><br> 
  35. <br> 
  36. </p> 
  37. <preclass="java"name="code">package www.csdn.spring1.bean.cyle; 
  38.  
  39. import org.junit.Test; 
  40. import org.springframework.beans.factory.config.ConfigurableBeanFactory; 
  41. import org.springframework.beans.factory.xml.XmlBeanFactory; 
  42. import org.springframework.context.ApplicationContext; 
  43. import org.springframework.context.ConfigurableApplicationContext; 
  44. import org.springframework.context.support.ClassPathXmlApplicationContext; 
  45. import org.springframework.core.io.ClassPathResource; 
  46.  
  47. import www.csdn.spring1.dao.BeanPostProcessorImpl; 
  48. import www.csdn.spring1.dao.HelloWordDaoImpl; 
  49.  
  50.  
  51.  
  52.  
  53.  
  54. public class BeanDemoTest { 
  55.  
  56.      
  57.     //BeanFactory中bean的生命周期 
  58.     @Test 
  59.     public void test2(){ 
  60.         //创建资源对象 
  61.         ClassPathResource resource=new ClassPathResource("spring_dao.xml"); 
  62.         //采用BeanFactory初始化容器 
  63.         ConfigurableBeanFactory cbf=new XmlBeanFactory(resource); 
  64.         //bean后置处理器必须通过addBeanPostProcessor(new BeanPostProcessorImpl())手动添加   
  65.         cbf.addBeanPostProcessor(new BeanPostProcessorImpl()); 
  66.         cbf.getBean("helloWordDaoImpl", HelloWordDaoImpl.class); 
  67.         cbf.destroySingletons(); 
  68.     } 
  69. </pre> 
  70. <p><br> 
  71. </p> 
posted on 2013-05-07 22:18  白云飘  阅读(304)  评论(0编辑  收藏  举报