国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot啟動(dòng)時(shí)的幾種初始化操作

這篇具有很好參考價(jià)值的文章主要介紹了SpringBoot啟動(dòng)時(shí)的幾種初始化操作。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1、靜態(tài)代碼塊

static靜態(tài)代碼塊,在類加載的時(shí)候即自動(dòng)執(zhí)行。

2、構(gòu)造方法

在對(duì)象初始化時(shí)執(zhí)行。執(zhí)行順序在static靜態(tài)代碼塊之后。

3、通過(guò)注解@PostConstruct實(shí)現(xiàn)

@PostConstruct注解使用在方法上,它可以被用來(lái)標(biāo)注一個(gè)非靜態(tài)的 void 方法,這個(gè)方法會(huì)在該類被 Spring 容器初始化后立即執(zhí)行。因?yàn)樗膱?zhí)行時(shí)機(jī)是在依賴注入之后,對(duì)象構(gòu)造完成之后,也就是說(shuō)是在@Autowired注入之后執(zhí)行。所以這里可以進(jìn)行一些初始化操作,如某些需要在對(duì)象創(chuàng)建后才能進(jìn)行的數(shù)據(jù)初始化操作。

需要注意以下幾點(diǎn):

  1. @PostConstruct 只能用在方法上面,而不能用在屬性或構(gòu)造函數(shù)上。

  2. 一個(gè)類中可以有多個(gè)使用 @PostConstruct 注解的方法,但執(zhí)行順序并不是固定的。

  3. @PostConstruct 注解的方法在本類中必須是無(wú)參數(shù)的,如果有參數(shù),那么這個(gè)方法不會(huì)被執(zhí)行。

  4. @PostConstruct 注解的方法在實(shí)現(xiàn)上可以使用任意修飾符。

假設(shè)我們有一個(gè)需要初始化數(shù)據(jù)的類:

public class InitService {

    private List<String> data;

    public InitService() {
        this.data = Arrays.asList("A", "B", "C");
    }

    @PostConstruct
    public void init() {
        data.add("D");
    }

    public List<String> getData() {
        return this.data;
    }
}

當(dāng)我們實(shí)例化 InitService 時(shí),構(gòu)造函數(shù)會(huì)為 data 屬性賦初值,而 @PostConstruct 注解的 init 方法會(huì)在 Spring 容器實(shí)例化完 InitService 后被執(zhí)行,將 “D” 添加到 data 列表中。所以當(dāng)我們調(diào)用 getData() 方法時(shí),返回的列表應(yīng)該是 [A, B, C, D]。

接下來(lái)看看 @Autowired 和@PostConstruct 的具體執(zhí)行順序

@Service
public class TestA {
    static {
        System.out.println("staticA");
    }
    @Autowired
    private TestB testB;

    public TestA() {
        System.out.println("這是TestA 的構(gòu)造方法");
    }

    @PostConstruct
    private void init() {
        System.out.println("這是TestA的 init 方法");
        testB.test();
    }
}
@Service
public class TestB {
    static {
        System.out.println("staticB");
    }
    @PostConstruct
    private void init() {
        System.out.println("這是TestB的init 方法");
    }

    public TestB() {
        System.out.println("這是TestB的構(gòu)造方法");
    }

    void test() {
        System.out.println("這是TestB的test方法");
    }
}

?服務(wù)啟動(dòng)后,輸出結(jié)果如下:

staticA
這是TestA 的構(gòu)造方法
staticB
這是TestB的構(gòu)造方法
這是TestB的init 方法
這是TestA的 init 方法
這是TestB的test方法

結(jié)論為:等@Autowired注入后,在執(zhí)行@PostConstruct注解的方法。

4、實(shí)現(xiàn)CommandLineRunner和ApplicationRunner接口

當(dāng)有多個(gè)類實(shí)現(xiàn)了?ApplicationRunner?和?CommandLineRunner?接口時(shí),可以通過(guò)在類上添加@Order(數(shù)值越大,優(yōu)先級(jí)越低)注解來(lái)設(shè)定運(yùn)行順序。

實(shí)現(xiàn)ApplicationRunner接口

@Component
@Order(1)
public class TestApplicationRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("order1:TestApplicationRunner");

    }
}

?實(shí)現(xiàn)CommandLineRunner接口

@Component
@Order(2)
public class TestCommandLineRunner implements CommandLineRunner {
    @Override
    public void run(String... strings) throws Exception {
        System.out.println("order2:TestCommandLineRunner");
    }
}

結(jié)論

最終的執(zhí)行結(jié)果如下

staticA
這是TestA 的構(gòu)造方法
staticB
這是TestB的構(gòu)造方法
這是TestB的init 方法
這是TestA的 init 方法
這是TestB的test方法
order1:TestApplicationRunner
order2:TestCommandLineRunner

所以得到結(jié)論:static>constructer>?@Autowired>@PostConstruct>ApplicationRunner>CommandLineRunner文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-489919.html

到了這里,關(guān)于SpringBoot啟動(dòng)時(shí)的幾種初始化操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 一文詳解 springboot 項(xiàng)目啟動(dòng)時(shí)異步執(zhí)行初始化邏輯

    你知道的越多,你不知道的越多 點(diǎn)贊再看,養(yǎng)成習(xí)慣 如果您有疑問(wèn)或者見(jiàn)解,歡迎指教: 企鵝:869192208 前言 前面的工作中,為了提高地區(qū)數(shù)據(jù)的響應(yīng)時(shí)間,需要加載全國(guó)區(qū)劃數(shù)據(jù)到 redis 中緩存起來(lái),這個(gè)過(guò)程希望在項(xiàng)目時(shí)啟動(dòng)。 由于初始化全國(guó)區(qū)劃到 redis 中這個(gè)過(guò)程是

    2024年02月12日
    瀏覽(25)
  • 常見(jiàn)問(wèn)題03:SpringBoot項(xiàng)目啟動(dòng)初始化數(shù)據(jù)(執(zhí)行sql文件)

    常見(jiàn)問(wèn)題03:SpringBoot項(xiàng)目啟動(dòng)初始化數(shù)據(jù)(執(zhí)行sql文件)

    使用外部資源中定義的 SQL 腳本填充、初始化或清理數(shù)據(jù)庫(kù)。 調(diào)用addScript(org.springframework.core.io.Resource)以添加單個(gè) SQL 腳本位置。 調(diào)用addScripts(org.springframework.core.io.Resource…)以添加多個(gè) SQL 腳本位置。 請(qǐng)參閱此類中的 setter 方法以獲取更多配置選項(xiàng)。 調(diào)用populate(java.sql.Connect

    2024年02月13日
    瀏覽(34)
  • SpringBoot 底層機(jī)制分析【Tomcat 啟動(dòng)+Spring 容器初始化+Tomcat 如何關(guān)聯(lián)Spring 容器】【下】

    SpringBoot 底層機(jī)制分析【Tomcat 啟動(dòng)+Spring 容器初始化+Tomcat 如何關(guān)聯(lián)Spring 容器】【下】

    ??前言 本篇博文是關(guān)于SpringBoot 底層機(jī)制分析實(shí)現(xiàn),希望能夠幫助你更好的了解SpringBoot ?? ??個(gè)人主頁(yè):晨犀主頁(yè) ??個(gè)人簡(jiǎn)介:大家好,我是晨犀,希望我的文章可以幫助到大家,您的滿意是我的動(dòng)力???? ??歡迎大家:這里是CSDN,我總結(jié)知識(shí)的地方,歡迎來(lái)到我的博客

    2024年02月13日
    瀏覽(28)
  • Linux內(nèi)存初始化-啟動(dòng)階段的內(nèi)存初始化

    Linux內(nèi)存初始化-啟動(dòng)階段的內(nèi)存初始化

    本文代碼基于ARM64平臺(tái), Linux kernel 5.15 在加載kernel 之前, kernel對(duì)于系統(tǒng)是有一定要求的,明確規(guī)定了boot階段必須要把MMU關(guān)閉: 那么在進(jìn)入kernel之后, 就必須有一個(gè)使能MMU, 建立映射的過(guò)程, 本文描述kernel啟動(dòng)階段進(jìn)行內(nèi)存初始化相關(guān)的操作。 在初始化階段,我們mapping二段

    2024年02月08日
    瀏覽(25)
  • QTextDocument的使用方法及幾種初始化方式

    qtextDocument并不像控件一樣可以通過(guò)拖拽方式拉到設(shè)計(jì)器中使用,也不能直接聲明就可以初始化使用,而是需要通過(guò)包涵庫(kù)文件的方式包涵在當(dāng)前的窗體文件中。 如: 上面說(shuō)了Qtextdocument并不是控件,它是輔助配合QT中的文本編輯控件進(jìn)行文本操作的類庫(kù)。 QTextDocument在使用之

    2024年02月09日
    瀏覽(20)
  • 初始化k8s(啟動(dòng))

    初始化k8s(啟動(dòng))

    一位普通的程序員,慢慢在努力變強(qiáng)! 溫馨提示:初始化k8s的前置配置,請(qǐng)查看以下連接! k8s初始化前的基礎(chǔ)配置 提示:如果你是單機(jī),需要開(kāi)啟污點(diǎn) 本章節(jié)完成了,各位正在努力的程序員們,如果你們覺(jué)得本文章對(duì)您有用的話,或者是你學(xué)到了一些東西,希望用您那漂亮

    2024年02月11日
    瀏覽(18)
  • C語(yǔ)言中結(jié)構(gòu)體初始化并清零的方法有幾種?

    結(jié)構(gòu)體初始化清零方法 在C語(yǔ)言中,結(jié)構(gòu)體初始化并清零的方法有以下幾種: 手動(dòng)賦值為0:結(jié)構(gòu)體定義后在函數(shù)內(nèi)手動(dòng)將每個(gè)成員都賦值為0。例如: 使用memset()函數(shù):可以使用? memset() ?函數(shù)將結(jié)構(gòu)體的所有成員都設(shè)置為0。例如: C99標(biāo)準(zhǔn)的方式:C99標(biāo)準(zhǔn)新增了一個(gè)特性,可

    2024年02月17日
    瀏覽(27)
  • 啟動(dòng)Flink顯示初始化狀態(tài)怎么解決?

    啟動(dòng)Flink顯示初始化狀態(tài)怎么解決?

    Flink On Yarn模式 問(wèn)題 思路 具體實(shí)現(xiàn)思路 腳本如下 flinkInitDeal.sh

    2024年02月14日
    瀏覽(32)
  • PLSQL啟動(dòng)報(bào)錯(cuò):Initialization error,不能初始化

    PLSQL啟動(dòng)報(bào)錯(cuò):Initialization error,不能初始化

    出現(xiàn)場(chǎng)景:我這里原來(lái)有個(gè)舊版的PLSQL,想用新版的又裝了個(gè)新版,啟動(dòng)的時(shí)候報(bào)錯(cuò) 第一個(gè)提示明顯看到是和程序位數(shù)相關(guān)的,不管是32位還是64位要做到向匹配 第二個(gè)提示可以看到是和oci.dll文件的設(shè)置相關(guān) 登錄的時(shí)候先點(diǎn)取消,不使用用戶登錄,進(jìn)入客戶端 檢查PLSQL的OC

    2024年01月23日
    瀏覽(38)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包