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

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

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

一 @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這個注解能解決一部分復雜功能的屬性的賦值,當時對于一些比較零散的初始值的創(chuàng)建,用@Autowired這個注解就有點多余了,因為像如下:BlockingQueue<FileTaskDTO>,Executor ,Limiter ,Map<Long, FileTaskDTO>這些屬性我只想簡單的new一個對象或是賦值一個固定值,這個時候我們還要單獨的創(chuàng)建一個類(這個類里面單單只是new一個對象,或者設置一個固定值)然后再用@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()方法之前,對一些零散的屬性進行賦值的注解。 如上面被@PostConstruct修飾的的initParams()方法。

2 @PostConstruct

  1. 除了攔截器這個特殊情況以外,其他情況都不允許有參數(shù),否則spring框架會報IllegalStateException;而且返回值要是void,但實際也可以有返回值,至少不會報錯,只會忽略
  2. 方法隨便你用什么權限來修飾,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服務啟動之后才開始的。第3個是在spring容器啟動之后,bean對象的構(gòu)造方法完成后啟動的。 他們具有如下關系:

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

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

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

相關文章

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

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

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

    Java刪除ArrayList中的重復元素的兩種方法

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

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

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

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

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

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

    這篇文章主要介紹了Java未賦值變量的初始值(默認值),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    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基礎JdkDynamicAopProxy

    java開發(fā)AOP基礎JdkDynamicAopProxy

    這篇文章主要為大家介紹了java開發(fā)AOP基礎JdkDynamicAopProxy源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    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程序都運行在JVM虛擬機內(nèi)部,我們這里介紹的自然是JVM(虛擬)內(nèi)存中的堆和棧,需要的朋友可以參考下
    2015-01-01
  • JAVAlogback日志管理詳解

    JAVAlogback日志管理詳解

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

最新評論

沧州市| 石阡县| 庆安县| 瑞安市| 桂平市| 苏尼特右旗| 大悟县| 海丰县| 揭西县| 璧山县| 凭祥市| 册亨县| 西充县| 泾阳县| 东乡族自治县| 曲靖市| 晋宁县| 柘荣县| 唐河县| 绥化市| 固阳县| 鹤岗市| 勃利县| 阳原县| 沅江市| 南通市| 离岛区| 叙永县| 栾川县| 迭部县| 孝昌县| 广宗县| 兴山县| 海原县| 习水县| 怀远县| 龙南县| 攀枝花市| 佛学| 衡阳县| 双峰县|