亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一 @PostConstruct注解的來(lái)由

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

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

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

二 @PostConstruct注解

1 從需求方面講解@PostConstruct注解的來(lái)由

@Autowired這個(gè)注解能解決一部分復(fù)雜功能的屬性的賦值,當(dāng)時(shí)對(duì)于一些比較零散的初始值的創(chuàng)建,用@Autowired這個(gè)注解就有點(diǎn)多余了,因?yàn)橄袢缦拢築lockingQueue<FileTaskDTO>,Executor ,Limiter ,Map<Long, FileTaskDTO>這些屬性我只想簡(jiǎn)單的new一個(gè)對(duì)象或是賦值一個(gè)固定值,這個(gè)時(shí)候我們還要單獨(dú)的創(chuàng)建一個(gè)類(這個(gè)類里面單單只是new一個(gè)對(duì)象,或者設(shè)置一個(gè)固定值)然后再用@Autowired注入屬性,這樣操作就有點(diǎn)雞肋了。

@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這個(gè)注解就誕生了,它就是用來(lái)處理在@Autowired注入屬性后init()方法之前,對(duì)一些零散的屬性進(jìn)行賦值的注解。 如上面被@PostConstruct修飾的的initParams()方法。

2 @PostConstruct

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

所以,綜上所述,在spring項(xiàng)目中,在一個(gè)bean的初始化過(guò)程中,方法執(zhí)行先后順序?yàn)?/p>

Constructor > @Autowired > @PostConstruct

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

在這里插入圖片描述

3 其它將屬性注入bean對(duì)象的方法

  • 定義靜態(tài)常量。
  • Constructor
  • @Autowired
  • @PostConstruct注解
  • 實(shí)現(xiàn)InitializingBean接口重寫(xiě)afterPropertiesSet()方法
  • 實(shí)現(xiàn)CommandLineRunner或者ApplicationRunner接口,他們?cè)谌萜鲉?dòng)后啟動(dòng)

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

spring容器啟動(dòng) > Constructor > @Autowired > @PostConstruct > InitializingBean > CommandLineRunner或者ApplicationRunner`接口

注意:bean對(duì)象的初始化是挨個(gè)進(jìn)行的(上一個(gè)完成才能進(jìn)行下一個(gè)),如果某個(gè)bean對(duì)象中的@PostConstruct方法內(nèi)的邏輯處理過(guò)長(zhǎng)就會(huì)導(dǎo)致spring的啟動(dòng)時(shí)間邊長(zhǎng),因?yàn)橹挥性谒械腷ean對(duì)象初始化完成之后springBoot才會(huì)打開(kāi)端口提供服務(wù)。 如果出現(xiàn)如上問(wèn)題的化可以采用實(shí)現(xiàn)CommandLineRunner或者ApplicationRunner接口的方法來(lái)注入一些數(shù)據(jù),因?yàn)檫@一步是在springboot啟動(dòng)完成之后在運(yùn)行的

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

相關(guān)文章

  • SpringMVC中的Model對(duì)象用法說(shuō)明

    SpringMVC中的Model對(duì)象用法說(shuō)明

    這篇文章主要介紹了SpringMVC中的Model對(duì)象用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 淺談Java轉(zhuǎn)義符\\|

    淺談Java轉(zhuǎn)義符\\|

    java中\(zhòng)需要用\\來(lái)表示吧這個(gè)你應(yīng)該知道,而split中傳入的參數(shù)是什么呢 他并不是普通的字符串 你可以查一下api文檔 它要求傳入的是正則表達(dá)式 而正則表達(dá)式也需要這個(gè)\所以在這里有這個(gè)\\
    2015-06-06
  • Springboot非分布式定時(shí)任務(wù)實(shí)現(xiàn)代碼

    Springboot非分布式定時(shí)任務(wù)實(shí)現(xiàn)代碼

    這篇文章主要介紹了Springboot非分布式定時(shí)任務(wù)實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Springboot?配置線程池創(chuàng)建線程及配置?@Async?異步操作線程池詳解

    Springboot?配置線程池創(chuàng)建線程及配置?@Async?異步操作線程池詳解

    這篇文章主要介紹了Springboot?配置線程池創(chuàng)建線程及配置?@Async?異步操作線程池詳解,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • idea整合deepseek實(shí)現(xiàn)AI輔助編程的流程步驟

    idea整合deepseek實(shí)現(xiàn)AI輔助編程的流程步驟

    文章介紹了如何在IntelliJ IDEA中整合DeepSeek平臺(tái)實(shí)現(xiàn)AI輔助編程,步驟包括安裝CodeGPT插件、注冊(cè)DeepSeek開(kāi)發(fā)者賬號(hào)、配置API密鑰以及設(shè)置API信息,需要的朋友可以參考下
    2025-02-02
  • Java實(shí)現(xiàn)簡(jiǎn)易提款機(jī)

    Java實(shí)現(xiàn)簡(jiǎn)易提款機(jī)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)易提款機(jī),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java8新特性Stream流詳解

    Java8新特性Stream流詳解

    Java8 Stream使用的是函數(shù)式編程模式,如同它的名字一樣,它可以被用來(lái)對(duì)集合進(jìn)行鏈狀流式的操作,本文就將帶著你如何使用 Java 8 不同類型的 Stream 操作,同時(shí)還將了解流的處理順序,以及不同順序的流操作是如何影響運(yùn)行時(shí)性能的
    2023-07-07
  • spring中的BeanFactory與FactoryBean的講解

    spring中的BeanFactory與FactoryBean的講解

    今天小編就為大家分享一篇關(guān)于spring中的BeanFactory與FactoryBean的講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • java web實(shí)現(xiàn)自動(dòng)登錄

    java web實(shí)現(xiàn)自動(dòng)登錄

    這篇文章主要為大家詳細(xì)介紹了java web實(shí)現(xiàn)自動(dòng)登錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Spring Boot集成Redis實(shí)戰(zhàn)操作功能

    Spring Boot集成Redis實(shí)戰(zhàn)操作功能

    這篇文章主要介紹了Spring Boot集成Redis實(shí)戰(zhàn)操作,包括如何集成redis以及redis的一些優(yōu)點(diǎn),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11

最新評(píng)論