spring中的@PostConstruct注解的用法


該注解可以實現在運行工程時,自動運行該注解下的方法;

@PostConstruct是java5的時候引入的注解,指的是在項目啟動的時候執行這個方法,也可以理解為在spring容器啟動的時候執行,可作為一些數據的常規化加載,比如數據字典之類的。

 

 被@PostConstruct修飾的方法會在服務器加載Servle的時候運行,並且只會被服務器執行一次。PostConstruct在構造函數之后執行

也就是加載順序 

 服務器加載Servlet -> servlet 構造函數的加載 -> postConstruct ->init(init是在service 中的初始化方法. 創建service 時發生的事件.) ->Service->destory->predestory->服務器卸載serlvet

那么問題:spring中Constructor、@Autowired、@PostConstruct的順序
Constructor >> @Autowired >> @PostConstruct

依賴注入的字面意思就可以知道,要將對象p注入到對象a,那么首先就必須得生成對象p與對象a,才能執行注入。所以,如果一個類A中有個成員變量p被@Autowired注解,那么@Autowired注入是發生在A的構造方法執行完之后的。

@PostConstruct應用場景:
如果想在生成對象時候完成某些初始化操作,而偏偏這些初始化操作又依賴於依賴注入,那么就無法在構造函數中實現。為此,可以使用@PostConstruct注解一個方法來完成初始化,@PostConstruct注解的方法將會在依賴注入完成后被自動調用。

 

現在的工程是啟動消息隊列時用到了這個注解

復制代碼
    @PostConstruct
    public void start() {

        try {
            int connect = producer.connect();
            if (connect == 0) {
                log.info("producer start success! groupName:{},namesrvAddr:{}", rocketMqProperties.getProducer().getGroupName(), rocketMqProperties.getNamesrvAddr());

            }
        } catch (MQException e) {
            e.printStackTrace();
        }
}

    @PreDestroy
    public void stop()  {
        try {
            if (producer != null) {
                producer.close();
                log.info("producer closed");
            }
        }catch (MQException a)
        {
            a.printStackTrace();
        }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM