欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springboot啟動(dòng)執(zhí)行特定代碼的方式匯總

 更新時(shí)間:2021年12月03日 11:20:59   作者:MrDeng886  
這篇文章主要介紹了Springboot啟動(dòng)執(zhí)行特定代碼的幾種方式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

實(shí)現(xiàn)InitializingBean接口或使用@PostConstruct注解

實(shí)現(xiàn)InitializingBean如下

public class AnotherExampleBean implements InitializingBean {

    @Override
    public void afterPropertiesSet() {
        // 做一些初始化的工作
    }
}

官方對(duì)其的解釋是這樣的:實(shí)現(xiàn)這個(gè)接口會(huì)讓這個(gè)bean的所有必要的屬性都被容器注入后(依賴注入),再去執(zhí)行afterPropertiesSet()里的方法。

筆者再用一個(gè)簡(jiǎn)單的例子去實(shí)際演示一下(注意:使用@PostConstruct和實(shí)現(xiàn)接口是等價(jià)的,可以二選一

我們?cè)趇nit方法上使用了@PostConstruct注解,并且方法里使用到了Chicken類,而這個(gè)Chicken類是通過(guò)依賴注入來(lái)設(shè)置的,所以印證了官方說(shuō)的話,會(huì)在依賴注入完以后才會(huì)調(diào)用@PostConstruct注解的方法。那為什么不在構(gòu)造器里往List里面方Chicken類呢,因?yàn)槿萜髡{(diào)用構(gòu)造器方法的時(shí)候,Chicken類還沒被注入,所以要寫在@PostConstruct注解的方法里。

// 首先聲明一個(gè)實(shí)體類
@Data 
public class Chicken {
    private String name ;
}
// 將他注入容器
@Configuration
public class UserConfig {
    @Bean
    public Chicken putUser(){
        Chicken chinken = new Chicken();
        chinken.setName("普通雞塊");
        return chinken;
    }
}
// 在family 類中調(diào)用 注入chinken
@Component
public class Family {
    @Resource
    Chicken chicken;

    public static List<String> names;

    @PostConstruct
    public void init(){
        names.add(chicken.getName());
    }
    public Family() {
        names = new LinkedList<>();
    }
}

在這里插入圖片描述

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

如果一個(gè)容器里的bean實(shí)現(xiàn)了ApplicationListener接口,那么在任何時(shí)候,如果有ApplicationEvent(事件)在ApplicationContext(容器)中被發(fā)布,該bean會(huì)收到通知,從而可以執(zhí)行相應(yīng)策略。

下面是Spring提供的幾種常用的ApplicationEvent事件

事件名稱 解釋
ContextRefreshedEvent 當(dāng)容器ApplicationContext容器正在初始化或refreshed時(shí)會(huì)發(fā)布這個(gè)事件。這里的初始化意味著所有的bean都被加載,并且有后置處理的bean都被檢測(cè)到并激活了。
ContextStartedEvent 當(dāng)容器啟動(dòng)調(diào)用start()方法是會(huì)發(fā)布這個(gè)事件,這里的開始是所有生命周期的bean都收到了一個(gè)開始的信號(hào)
ContextStoppedEvent 當(dāng)容器調(diào)用stop方法時(shí)會(huì)發(fā)布這個(gè)事件

舉一個(gè)簡(jiǎn)單的例子,下面的代碼我實(shí)現(xiàn)ApplicationListener接口并監(jiān)聽ContextRefreshedEvent事件,所以當(dāng)springboot啟動(dòng)并且初始化完成后,就能執(zhí)行下面的方法了。

@Component
@Slf4j
public class MenuManage implements ApplicationListener<ContextRefreshedEvent> {

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
       //做一些事情
    }
}

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

實(shí)現(xiàn)了CommandLineRunner的bean會(huì)被springboot監(jiān)測(cè)到,并在項(xiàng)目啟動(dòng)后執(zhí)行run方法,如果有多個(gè)bean實(shí)現(xiàn)了CommandLineRunner接口,那么可以使用order注解來(lái)指定執(zhí)行順序。

@Order(2)
@Component
public class ServerStartedReport implements CommandLineRunner{
    @Override
    public void run(String... args) throws Exception {
        //do something
    }
}

而實(shí)現(xiàn)ApplicationRunner接口與實(shí)現(xiàn)CommandLineRunner的唯一不同是,后者接收的參數(shù)是main方法傳進(jìn)去的原始參數(shù),而ApplicationRunner接收的參數(shù)是封裝過(guò)原始參數(shù)的,可以通過(guò)參數(shù)名字name來(lái)獲取指定的參數(shù)。

@Component
public class MyApplicationRunner implements ApplicationRunner{

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("ApplicationRunner:"+ Arrays.asList(args.getSourceArgs()));
        System.out.println("getOptionNames:"+args.getOptionNames());
        System.out.println("getOptionValues:"+args.getOptionValues("foo"));
        System.out.println("getOptionValues:"+args.getOptionValues("log"));
    }
}

到此這篇關(guān)于Springboot啟動(dòng)執(zhí)行特定代碼的幾種方式的文章就介紹到這了,更多相關(guān)Springboot啟動(dòng)執(zhí)行代碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ArrayList集合初始化及擴(kuò)容方式

    ArrayList集合初始化及擴(kuò)容方式

    這篇文章主要介紹了關(guān)于ArrayList集合初始化及擴(kuò)容方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • springboot實(shí)現(xiàn)敏感字段加密存儲(chǔ)解密顯示功能

    springboot實(shí)現(xiàn)敏感字段加密存儲(chǔ)解密顯示功能

    這篇文章主要介紹了springboot實(shí)現(xiàn)敏感字段加密存儲(chǔ),解密顯示,通過(guò)mybatis,自定義注解+AOP切面,Base64加解密方式實(shí)現(xiàn)功能,本文通過(guò)代碼實(shí)現(xiàn)給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • Java 實(shí)戰(zhàn)項(xiàng)目之在線點(diǎn)餐系統(tǒng)的實(shí)現(xiàn)流程

    Java 實(shí)戰(zhàn)項(xiàng)目之在線點(diǎn)餐系統(tǒng)的實(shí)現(xiàn)流程

    讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)在線點(diǎn)餐系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • java基礎(chǔ)之?dāng)?shù)組常用操作總結(jié)(必看篇)

    java基礎(chǔ)之?dāng)?shù)組常用操作總結(jié)(必看篇)

    下面小編就為大家?guī)?lái)一篇java基礎(chǔ)之?dāng)?shù)組常用操作總結(jié)(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • 關(guān)于Java反射給泛型集合賦值問題

    關(guān)于Java反射給泛型集合賦值問題

    這篇文章主要介紹了Java反射給泛型集合賦值,需要的朋友可以參考下
    2022-01-01
  • mybatis如何通過(guò)接口查找對(duì)應(yīng)的mapper.xml及方法執(zhí)行詳解

    mybatis如何通過(guò)接口查找對(duì)應(yīng)的mapper.xml及方法執(zhí)行詳解

    這篇文章主要給大家介紹了利用mybatis如何通過(guò)接口查找對(duì)應(yīng)的mapper.xml及方法執(zhí)行的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。
    2017-06-06
  • struts2配置靜態(tài)資源代碼詳解

    struts2配置靜態(tài)資源代碼詳解

    這篇文章主要介紹了struts2配置靜態(tài)資源的相關(guān)內(nèi)容,文中涉及了具體代碼介紹,需要的朋友可以參考下。
    2017-09-09
  • Java 按行讀取文件按行寫入文件并以空格分割字符串的方法

    Java 按行讀取文件按行寫入文件并以空格分割字符串的方法

    今天小編就為大家分享一篇Java 按行讀取文件按行寫入文件并以空格分割字符串的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • mybatis原理概述入門教程

    mybatis原理概述入門教程

    這篇文章主要介紹了在今天這篇博文中,我將要介紹一下mybatis的框架原理,以及mybatis的入門程序,實(shí)現(xiàn)用戶的增刪改查,她有什么優(yōu)缺點(diǎn)以及mybatis和hibernate之間存在著怎么樣的關(guān)系,大家這些問題一起通過(guò)本文學(xué)習(xí)吧
    2016-09-09
  • 使用java + selenium + OpenCV破解騰訊防水墻滑動(dòng)驗(yàn)證碼功能

    使用java + selenium + OpenCV破解騰訊防水墻滑動(dòng)驗(yàn)證碼功能

    這篇文章主要介紹了使用java + selenium + OpenCV破解騰訊防水墻滑動(dòng)驗(yàn)證碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11

最新評(píng)論