Atea - Hero's Grave

面向对象,开源,框架,敏捷,云计算,NoSQL,商业智能,编程思想。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  40 随笔 :: 0 文章 :: 28 评论 :: 0 Trackbacks
Spring可以给定义的bean/beans设置init-method和destroy-method。

helloworld.xml
<!--default scope is singleton-->
<bean id="bean1" class="my.Bean1"
  init-method
="init" destroy-method="destroy">
</bean>
<bean id="bean2" class="my.Bean2"
  init-method
="init" destroy-method="destroy">
</bean>

Bean1.
java
public class Bean1 {
    
public Bean1() {
      System.out.println(
"constructor Bean1");
    }    
    
public void init(){
        System.out.println(
"init Bean1");
    }    
    
public void destroy(){
        System.out.println(
"destroy Bean1");
    }      
}

Bean2.
java
public class Bean2 {
    
public Bean1() {
      System.out.println(
"constructor Bean2");
    }    
    
public void init(){
        System.out.println(
"init Bean2");
    }    
    
public void destroy(){
        System.out.println(
"destroy Bean2");
    }      


test.java
AbstractApplicationContext factory = new ClassPathXmlApplicationContext("helloworld.xml"); 
//如果是非web app环境,需要设置手动关闭IoC容器(shutdown hook)后才能执行destroy-method。
factory.registerShutdownHook();        
System.out.println(
"begin!");
Bean1 b1 
= (Bean1) factory.getBean("bean1");
Bean2 b2 
= (Bean2) factory.getBean("bean2");
System.out.println(
"end!");

输出:
constructor Bean1
init Bean1
constructor Bean2
init Bean2
begin!
end!
destroy Bean2
destroy Bean1
可以看出如果bean的scope是singleton,只会在Ico容器创建的时候被创建1次。
PS: bean初始化顺序和销毁顺序相反。

那么如果改变scope的话:
<bean id="bean1" class="my.Bean1" scope="prototype"
  init-method
="init" destroy-method="destroy">
</bean>
<bean id="bean2" class="my.Bean2"
  init-method
="init" destroy-method="destroy">
</bean>

输出:
constructor Bean2
init Bean2
begin!
constructor Bean1
init Bean1
end!
destroy Bean2

当IoC容器创建时,prototype的bean不再被创建了。
之后对于每次bean的请求都会创建新的对象,但任何时候都不会执行destroy-method!

注意:
1. 如果bean被aop监听的话(aop:pointcut),bean的init-method是不会执行的(构造函数会执行)。
2. 如果bean是其他bean的field(ref bean),init-method和构造函数都会执行。
posted on 2008-09-19 15:48 Atea 阅读(561) 评论(0)  编辑  收藏 所属分类: Spring

只有注册用户登录后才能发表评论。


网站导航: