• java的@PostConstruct注解


    注释类型 PostConstruct


    @Documented
    @Retention(value=RUNTIME)
    @Target(value=METHOD)
    public @interface PostConstruct

    PostConstruct 注释用于在依赖关系注入完成之后需要执行的方法上,以执行任何初始化。此方法必须在将类放入服务之前调用。支持依赖关系注入的所有类都必须支持此注释。即使类没有请求注入任何资源,用 PostConstruct 注释的方法也必须被调用。只有一个方法可以用此注释进行注释。应用 PostConstruct 注释的方法必须遵守以下所有标准:该方法不得有任何参数,除非是在 EJB 拦截器 (interceptor) 的情况下,根据 EJB 规范的定义,在这种情况下它将带有一个 InvocationContext 对象 ;该方法的返回类型必须为 void;该方法不得抛出已检查异常;应用 PostConstruct 的方法可以是 public、protected、package private 或 private;除了应用程序客户端之外,该方法不能是 static;该方法可以是 final;如果该方法抛出未检查异常,那么不得将类放入服务中,除非是能够处理异常并可从中恢复的 EJB。

    、、、、、、、、、、、、、、、、、、

    Java开发之@PostConstruct和@PreConstruct注解

     

          从Java EE5规范开始,Servlet增加了两个影响Servlet生命周期的注解(Annotation):@PostConstruct和@PreConstruct。这两个注解被用来修饰一个非静态的void()方法.而且这个方法不能有抛出异常声明。

    使用方式,例如:

    复制代码
    复制代码
    1     @PostConstruct                                 //方式1
    2     public void someMethod(){
    3         ...
    4     }
    5 
    6     public @PostConstruct void someMethod(){        //方式2
    7         ...  
    8     }
    复制代码
    复制代码

    1.@PostConstruct说明

         被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法。被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。

    2.@PreConstruct说明

         被@PreConstruct修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreConstruct修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。(详见下面的程序实践)

    其实从依赖注入的字面意思就可以知道,要将对象p注入到对象a,那么首先就必须得生成对象p与对象a,才能执行注入。所以,如果一个类A中有个成员变量p被@Autowired注解,那么@Autowired注入是发生在A的构造方法执行完之后的。

    如果想在生成对象时候完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么就无法在构造函数中实现。为此,可以使用@PostConstruct注解一个方法来完成初始化,@PostConstruct注解的方法将会在依赖注入完成后被自动调用。

    Constructor >> @Autowired >> @PostConstruct

    举个例子:

    1. public Class AAA {
    2.  @Autowired
    3.  private BBB b;
    4.  public AAA() {
    5. System.out.println("此时b还未被注入: b = " + b);
    6.  }
    7.  @PostConstruct
    8.  private void init() {
    9.  System.out.println("@PostConstruct将在依赖注入完成后被自动调用: b = " + b);
    10. }
    11. }
  • 相关阅读:
    Nbimer族助手 部分控件不能用的解决方法(转)
    jquery中通过全局变量来禁止多次ajax请求
    Three.JS 从世界坐标系转换到屏幕坐标系
    php 判断是手机版还是电脑端
    6个html5页面适配iphone6的技巧
    http://stackoverflow.com/questions/6065169/requestanimationframe-with-this-keyword
    javascript模仿php 函数 trim ltrim rtrim (原创)
    JavaScript中Trim(),TrimStart(),TrimEnd()的实现
    如何定位摄像机,使物体在屏幕上始终具有相同的像素宽度和高度?(threes)
    鸿基台式机安装
  • 原文地址:https://www.cnblogs.com/PengChengLi/p/10511977.html
Copyright © 2020-2023  润新知