亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Springboot如何啟動執行特定代碼

發布時間:2021-12-03 13:32:13 來源:億速云 閱讀:205 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關Springboot如何啟動執行特定代碼的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

實現InitializingBean接口或使用@PostConstruct注解

實現InitializingBean如下

public class AnotherExampleBean implements InitializingBean {

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

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

筆者再用一個簡單的例子去實際演示一下(注意:使用@PostConstruct和實現接口是等價的,可以二選一

我們在init方法上使用了@PostConstruct注解,并且方法里使用到了Chicken類,而這個Chicken類是通過依賴注入來設置的,所以印證了官方說的話,會在依賴注入完以后才會調用@PostConstruct注解的方法。那為什么不在構造器里往List里面方Chicken類呢,因為容器調用構造器方法的時候,Chicken類還沒被注入,所以要寫在@PostConstruct注解的方法里。

// 首先聲明一個實體類
@Data 
public class Chicken {
    private String name ;
}
// 將他注入容器
@Configuration
public class UserConfig {
    @Bean
    public Chicken putUser(){
        Chicken chinken = new Chicken();
        chinken.setName("普通雞塊");
        return chinken;
    }
}
// 在family 類中調用 注入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<>();
    }
}

Springboot如何啟動執行特定代碼

實現ApplicationListener接口

如果一個容器里的bean實現了ApplicationListener接口,那么在任何時候,如果有ApplicationEvent(事件)在ApplicationContext(容器)中被發布,該bean會收到通知,從而可以執行相應策略。

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

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

舉一個簡單的例子,下面的代碼我實現ApplicationListener接口并監聽ContextRefreshedEvent事件,所以當springboot啟動并且初始化完成后,就能執行下面的方法了。

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

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

實現CommandLineRunner或ApplicationRunner 接口

實現了CommandLineRunner的bean會被springboot監測到,并在項目啟動后執行run方法,如果有多個bean實現了CommandLineRunner接口,那么可以使用order注解來指定執行順序。

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

而實現ApplicationRunner接口與實現CommandLineRunner的唯一不同是,后者接收的參數是main方法傳進去的原始參數,而ApplicationRunner接收的參數是封裝過原始參數的,可以通過參數名字name來獲取指定的參數。

@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"));
    }
}

感謝各位的閱讀!關于“Springboot如何啟動執行特定代碼”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

北流市| 博野县| 炎陵县| 内黄县| 洞口县| 吉林省| 泸定县| 故城县| 临洮县| 呼和浩特市| 阿拉善盟| 尼木县| 如皋市| 盐边县| 朝阳区| 绩溪县| 唐河县| 景德镇市| 监利县| 桂阳县| 郓城县| 德兴市| 沛县| 新沂市| 龙江县| 新建县| 乌兰浩特市| 巨鹿县| 同心县| 茶陵县| 郯城县| 历史| 松滋市| 奉新县| 广南县| 隆回县| 邮箱| 大渡口区| 陈巴尔虎旗| 太仆寺旗| 竹溪县|