@PostConstruct

Posted 再等三分钟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@PostConstruct相关的知识,希望对你有一定的参考价值。

@PostConstruct
public void init() 
    try 
        consumer.subscribe("queue_name", (body, meta) -> 
           //body中包含了上传到mq的数据
           method(body);       
        );
     catch (Exception e) 
        log.error("failed to subcribe queue_name", e);
    
订阅者只需要订阅一次,所以这个接口只需要在启动的时候订阅一次就可以了。

用到了@PostConstruct

API使用说明

以下为@PostConstruct的API使用说明:

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


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


@PostConstruct修饰的方法会在服务器加载servelet的时候运行,并且只会被服务器调用一次

@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。


@PreDestroy说明

     被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreDestroy修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。


servlet执行流程“

web容器加载servlet-->servlet构造函数-->PostConstruct注解方法-->init()-->service-->destory()--->PreDestory注解方法


以上是关于@PostConstruct的主要内容,如果未能解决你的问题,请参考以下文章

@PostConstruct

Mockito + Spring + @PostConstruct,mock初始化错误,为啥会调用@PostConstruct?

@PostConstruct注解

为啥使用@PostConstruct?

PostConstruct

@PostConstruct和@PreConstruct注解