最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring中的@PostConstruct注解使用方法解析

 更新時間:2023年11月02日 10:38:32   作者:我的龍呢  
這篇文章主要介紹了Spring中的@PostConstruct注解使用方法解析,@PostConstruct注解是用來處理在@Autowired注入屬性后init()方法之前,對一些零散的屬性進(jìn)行賦值的注解,需要的朋友可以參考下

一 @PostConstruct注解的來由

構(gòu)造方法和@Autowired注解

一般情況下我們大多用@Autowired來完成某個類中的屬性的注入。 @Autowired這個注解在構(gòu)造方法執(zhí)行后執(zhí)行,以如下為例:就是在通過構(gòu)造方法生成FileTaskExecutor 和FileTaskHandlerFactory這兩個對象后,再把生成的這個FileTaskHandlerFactory對象賦值到FileTaskExecutor 中的fileTaskHandlerFactory屬性上。 有點類似set方法。

@Component("backendFileTaskExecutor")
public class FileTaskExecutor {
   @Autowired
    private FileTaskHandlerFactory fileTaskHandlerFactory;
}

二 @PostConstruct注解

1 從需求方面講解@PostConstruct注解的來由

@Autowired這個注解能解決一部分復(fù)雜功能的屬性的賦值,當(dāng)時對于一些比較零散的初始值的創(chuàng)建,用@Autowired這個注解就有點多余了,因為像如下:BlockingQueue<FileTaskDTO>,Executor ,Limiter ,Map<Long, FileTaskDTO>這些屬性我只想簡單的new一個對象或是賦值一個固定值,這個時候我們還要單獨的創(chuàng)建一個類(這個類里面單單只是new一個對象,或者設(shè)置一個固定值)然后再用@Autowired注入屬性,這樣操作就有點雞肋了。

@Component("backendFileTaskExecutor")
public class FileTaskExecutor {
   @Autowired
    private FileTaskHandlerFactory fileTaskHandlerFactory;

	private BlockingQueue<FileTaskDTO> taskQueue;
    private Executor executor;
    private Limiter limiter;
    private Map<Long, FileTaskDTO> handlingTask;

	@PostConstruct
    public void initParams() {
        taskQueue = new ArrayBlockingQueue<>(MAX_POOL_TASK_SIZE);
        handlingTask = new ConcurrentHashMap<>();
        limiter = new Limiter(configService.getMaxPermitUsers(), configService.getMaxPermitPerUserTasks());
        executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 2);
        executor.execute(new Boss());
        cleanTempFile();
    }
}

所以@PostConstruct這個注解就誕生了,它就是用來處理在@Autowired注入屬性后init()方法之前,對一些零散的屬性進(jìn)行賦值的注解。 如上面被@PostConstruct修飾的的initParams()方法。

2 @PostConstruct

  1. 除了攔截器這個特殊情況以外,其他情況都不允許有參數(shù),否則spring框架會報IllegalStateException;而且返回值要是void,但實際也可以有返回值,至少不會報錯,只會忽略
  2. 方法隨便你用什么權(quán)限來修飾,public、protected、private都可以,反正功能是由反射來實現(xiàn)
  3. 方法不可以是static的,但可以是final的

所以,綜上所述,在spring項目中,在一個bean的初始化過程中,方法執(zhí)行先后順序為

Constructor > @Autowired > @PostConstruct

先執(zhí)行完構(gòu)造方法,再注入依賴,最后執(zhí)行初始化操作,所以這個注解就避免了一些需要在構(gòu)造方法里使用依賴組件的尷尬。

在這里插入圖片描述

3 其它將屬性注入bean對象的方法

  • 定義靜態(tài)常量。
  • Constructor
  • @Autowired
  • @PostConstruct注解
  • 實現(xiàn)InitializingBean接口重寫afterPropertiesSet()方法
  • 實現(xiàn)CommandLineRunner或者ApplicationRunner接口,他們在容器啟動后啟動

值得注意的是第4個是在tomcat服務(wù)啟動之后才開始的。第3個是在spring容器啟動之后,bean對象的構(gòu)造方法完成后啟動的。 他們具有如下關(guān)系:

spring容器啟動 > Constructor > @Autowired > @PostConstruct > InitializingBean > CommandLineRunner或者ApplicationRunner`接口

注意:bean對象的初始化是挨個進(jìn)行的(上一個完成才能進(jìn)行下一個),如果某個bean對象中的@PostConstruct方法內(nèi)的邏輯處理過長就會導(dǎo)致spring的啟動時間邊長,因為只有在所有的bean對象初始化完成之后springBoot才會打開端口提供服務(wù)。 如果出現(xiàn)如上問題的化可以采用實現(xiàn)CommandLineRunner或者ApplicationRunner接口的方法來注入一些數(shù)據(jù),因為這一步是在springboot啟動完成之后在運(yùn)行的

到此這篇關(guān)于Spring中的@PostConstruct注解使用方法解析的文章就介紹到這了,更多相關(guān)Spring中的@PostConstruct注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java簡單驗證身份證功能示例

    Java簡單驗證身份證功能示例

    這篇文章主要介紹了Java簡單驗證身份證功能,涉及java針對字符串的截取、判斷相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • Java刪除ArrayList中的重復(fù)元素的兩種方法

    Java刪除ArrayList中的重復(fù)元素的兩種方法

    在Java編程中,ArrayList是一種常用的集合類,它允許我們存儲一組元素,在某些情況下,我們可能需要移除其中重復(fù)的元素,只保留唯一的元素,下面介紹兩種常見的刪除ArrayList中重復(fù)元素的方法,需要的朋友可以參考下
    2024-12-12
  • Java gRPC攔截器簡單實現(xiàn)分布式日志鏈路追蹤器過程詳解

    Java gRPC攔截器簡單實現(xiàn)分布式日志鏈路追蹤器過程詳解

    有請求的發(fā)送、處理,當(dāng)然就會有攔截器的需求,例如在服務(wù)端通過攔截器統(tǒng)一進(jìn)行請求認(rèn)證等操作,這些就需要攔截器來完成,今天松哥先和小伙伴們來聊一聊gRPC中攔截器的基本用法,后面我再整一篇文章和小伙伴們做一個基于攔截器實現(xiàn)的JWT認(rèn)證的gRPC
    2023-03-03
  • Java將Word轉(zhuǎn)換成PDF的常用用法

    Java將Word轉(zhuǎn)換成PDF的常用用法

    Java開發(fā)人員在處理文檔轉(zhuǎn)換時,常常需要將Word或Excel文檔轉(zhuǎn)換為PDF格式,以便于更好地保持格式一致性、便于分發(fā)和打印,這篇文章主要給大家介紹了關(guān)于Java將Word轉(zhuǎn)換成PDF的常用用法,需要的朋友可以參考下
    2024-08-08
  • Java未賦值變量的初始值解析(默認(rèn)值)

    Java未賦值變量的初始值解析(默認(rèn)值)

    這篇文章主要介紹了Java未賦值變量的初始值(默認(rèn)值),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • HandlerMapping之RequestMappingHandlerMapping作用詳解

    HandlerMapping之RequestMappingHandlerMapping作用詳解

    這篇文章主要介紹了HandlerMapping之RequestMappingHandlerMapping作用詳解,HandlerMapping是用來尋找Handler的,并不與Handler的類型或者實現(xiàn)綁定,而是根據(jù)需要定義的,那么為什么要單獨給@RequestMapping實現(xiàn)一個HandlerMapping,需要的朋友可以參考下
    2023-10-10
  • java開發(fā)AOP基礎(chǔ)JdkDynamicAopProxy

    java開發(fā)AOP基礎(chǔ)JdkDynamicAopProxy

    這篇文章主要為大家介紹了java開發(fā)AOP基礎(chǔ)JdkDynamicAopProxy源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Java 單元測試之Mockito 模擬靜態(tài)方法與私有方法最佳實踐

    Java 單元測試之Mockito 模擬靜態(tài)方法與私有方法最佳實踐

    本文將深入探討如何使用 Mockito 來模擬靜態(tài)方法和私有方法,結(jié)合大量實戰(zhàn)代碼示例,帶你突破傳統(tǒng)單元測試的邊界,寫出更徹底、更獨立、更具可讀性的測試用例,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • Java中堆和棧的區(qū)別詳解

    Java中堆和棧的區(qū)別詳解

    這篇文章主要介紹了Java中堆和棧的區(qū)別詳解,所有的Java程序都運(yùn)行在JVM虛擬機(jī)內(nèi)部,我們這里介紹的自然是JVM(虛擬)內(nèi)存中的堆和棧,需要的朋友可以參考下
    2015-01-01
  • JAVAlogback日志管理詳解

    JAVAlogback日志管理詳解

    本篇文章主要介紹了在SpringBoot中使用Logback管理記錄日志,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-09-09

最新評論

临江市| 堆龙德庆县| 黄冈市| 遂平县| 巴林左旗| 兴文县| 防城港市| 辽阳市| 东方市| 紫金县| 金溪县| 株洲县| 临江市| 梁河县| 乃东县| 大厂| 当涂县| 翁牛特旗| 温泉县| 通渭县| 陕西省| 平江县| 泰安市| 蓬莱市| 佳木斯市| 南汇区| 天水市| 玛多县| 郯城县| 湄潭县| 许昌市| 兴国县| 沿河| 普兰县| 武陟县| 洛南县| 古丈县| 瑞安市| 且末县| 廊坊市| 商水县|