• spring的@PostConstruct 和 @PreDestroy 注解


    @PostConstruct 和 @PreDestroy  

    468.    

    469.  Spring 容器中的 Bean 是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,您既可以通过实现 InitializingBean/DisposableBean 接口来定制初始化之后 / 销毁之前的操作方法,也可以通过 <bean> 元素的 init-method/destroy-method 属性指定初始化之后 / 销毁之前调用的操作方法。关于 Spring 的生命周期,笔者在《精通 Spring 2.x—企业应用开发精解》第 3 章进行了详细的描述,有兴趣的读者可以查阅。  

    470.    

    471.  JSR-250 为初始化之后/销毁之前方法的指定定义了两个注释类,分别是 @PostConstruct 和 @PreDestroy,这两个注释只能应用于方法上。标注了 @PostConstruct 注释的方法将在类实例化后调用,而标注了 @PreDestroy 的方法将在类销毁之前调用。  

    472.    

    473.    

    474.  清单 17. 使用 @PostConstruct 和 @PreDestroy 注释的 Boss.java  

    475.                    

    476.  package com.baobaotao;  

    477.    

    478.  import javax.annotation.Resource;  

    479.  import javax.annotation.PostConstruct;  

    480.  import javax.annotation.PreDestroy;  

    481.    

    482.  public class Boss {  

    483.      @Resource  

    484.      private Car car;  

    485.    

    486.      @Resource(name = "office")  

    487.      private Office office;  

    488.    

    489.      @PostConstruct  

    490.      public void postConstruct1(){  

    491.          System.out.println("postConstruct1");  

    492.      }  

    493.    

    494.      @PreDestroy  

    495.      public void preDestroy1(){  

    496.          System.out.println("preDestroy1");   

    497.      }  

    498.      …  

    499.  }  

    500.     

    501.    

    502.    

    503.  您只需要在方法前标注 @PostConstruct 或 @PreDestroy,这些方法就会在 Bean 初始化后或销毁之前被 Spring 容器执行了。  

    504.    

    505.  我们知道,不管是通过实现 InitializingBean/DisposableBean 接口,还是通过 <bean> 元素的 init-method/destroy-method 属性进行配置,都只能为 Bean 指定一个初始化 / 销毁的方法。但是使用 @PostConstruct 和 @PreDestroy 注释却可以指定多个初始化 / 销毁方法,那些被标注 @PostConstruct 或 @PreDestroy 注释的方法都会在初始化 / 销毁时被执行。  

    506.    

    507.  通过以下的测试代码,您将可以看到 Bean 的初始化 / 销毁方法是如何被执行的:  

    508.    

    509.    

    510.  清单 18. 测试类代码  

    511.                    

    512.  package com.baobaotao;  

    513.    

    514.  import org.springframework.context.support.ClassPathXmlApplicationContext;  

    515.    

    516.  public class AnnoIoCTest {  

    517.    

    518.      public static void main(String[] args) {  

    519.          String[] locations = {"beans.xml"};  

    520.          ClassPathXmlApplicationContext ctx =   

    521.              new ClassPathXmlApplicationContext(locations);  

    522.          Boss boss = (Boss) ctx.getBean("boss");  

    523.          System.out.println(boss);  

    524.          ctx.destroy();// 关闭 Spring 容器,以触发 Bean 销毁方法的执行  

    525.      }  

    526.  }  

    527.     

    528.    

    529.    

    530.  这时,您将看到标注了 @PostConstruct 的 postConstruct1() 方法将在 Spring 容器启动时,创建 Boss Bean 的时候被触发执行,而标注了 @PreDestroy 注释的 preDestroy1() 方法将在 Spring 容器关闭前销毁 Boss Bean 的时候被触发执行。 

     

  • 相关阅读:
    DNS放大攻击
    Java并发编程(四):并发容器(转)
    关注商业价值
    样式小记
    应用程序优化
    查看当前的连接和锁
    重命名你的数据库
    转:对XML插入操作
    对数据的分页再一次思考
    不浪费自己的时间,同时也不浪费别人的时间
  • 原文地址:https://www.cnblogs.com/YuyuanNo1/p/12498400.html
Copyright © 2020-2023  润新知