spring bean的生命周期

分为定义,初始化,使用,消亡
写个例子测试一下:
第一步:建一个类User,代码如下:
java 代码
  1. package test.lyx;   
  2. publicclass User {   
  3.     private String userName;   
  4.     public String getUserName() {   
  5.         returnuserName;   
  6.     }   
  7.     publicvoid setUserName(String userName) {   
  8.         this.userName = userName;   
  9.     }   
  10. }   
第二步:将 User 注入. applicationContext.xml 配置如下:
xml 代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  3. <beans>  
  4.         <bean id="user" class="test.lyx.User" abstract="false"  
  5.         singleton="true" lazy-init="default" autowire="byType"  
  6.         dependency-check="default">  
  7.         <property name="userName">  
  8.             <value>liuyuanxi</value>  
  9.         </property>  
  10.     </bean>  
  11. </beans>  
第三步:建一个类TestMain测试一下:
java 代码
  1. package test.lyx;   
  2. import org.springframework.context.ApplicationContext;   
  3. import org.springframework.context.support.FileSystemXmlApplicationContext;   
  4. publicclass TestMain {   
  5.     publicstaticvoid main(String[] args) {   
  6.     ApplicationContext context=new FileSystemXmlApplicationContext("test/lyx/applicationContext.xml");   
  7.         User user1=(User)context.getBean("user");   
  8.         System.out.println(user1.getUserName());   
  9.     }   
  10. }  
这样运行该类会打出 liuyuanxi .那么这几步就是 bean 的定义和使用.
接下来我们在 User 类中加上两个方法: init clear, 当然方法明任你起.
java 代码
  1. publicvoid init(){   
  2.        this.userName="zhangsan";   
  3.    }   
  4.    publicvoid clear(){   
  5.        this.userName=null;   
  6.    }   
然后将配置文件修改如下:
xml 代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  3. <beans>  
  4.         <bean id="user" class="test.lyx.User" abstract="false"  
  5.         singleton="true" lazy-init="default" autowire="byType"  
  6.         dependency-check="default" init-method="init" destroy-method="clear">  
  7.         <property name="userName">  
  8.             <value>liuyuanxi</value>  
  9.         </property>  
  10.     </bean>  
  11. </beans>  
这里面的红线部分就是修改的内容.如果 init-method 属性设置了方法,那么就会在 bean 初始化的时候被执行.而 destroy-method 在消毁之前执行.
第二种方法:(实现初始化,和消毁的两个接口)
可以不在配置文件中指定 init-method destroy-method 两个方法.
我们把 User 类修改一下:代码如下:
java 代码
  1. package test.lyx;   
  2. import org.springframework.beans.factory.InitializingBean;   
  3. import org.springframework.beans.factory.DisposableBean;   
  4. publicclass User implements InitializingBean,DisposableBean{   
  5.     private String userName;   
  6.     public String getUserName() {   
  7.         returnuserName;   
  8.     }   
  9.     publicvoid setUserName(String userName) {   
  10.         this.userName = userName;   
  11.     }   
  12.     publicvoid init(){   
  13.         this.userName="zhangsan";   
  14.     }   
  15.     publicvoid clear(){   
  16.         this.userName=null;   
  17.     }   
  18.     publicvoid afterPropertiesSet() throws Exception {   
  19.         this.userName="wangwu";// TODO Auto-generated method stub   
  20.     }   
  21.     
  22.     publicvoid destroy() throws Exception {   
  23.         this.userName=null;// TODO Auto-generated method stub   
  24.         }   
  25. }   
修改过后的类,就是在原来的基础上,实现两个接口 InitializingBean,DisposableBean 也就是初始化和消毁的接口,这里我们要把 InitializingBean 接口里的 afterPropertiesSet 方法给覆盖掉,也就是将初始化的东西写在这个方法以里面.同时也要把 DisposableBean 接口的 destroy 方法覆盖掉,
消毁的东西写在这个方法里.这样的话,就无需在配置文件中配置 init-method destroy-method 两个方法.
整个的过程就是 bean 的生命周期.

你可能感兴趣的:(spring,bean,xml)