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

Springboot加載所有Bean之后運(yùn)行方式

 更新時(shí)間:2024年07月18日 11:25:34   作者:ldy夏沫  
這篇文章主要介紹了Springboot加載所有Bean之后運(yùn)行方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Springboot加載所有Bean之后運(yùn)行方式

Springboot啟動(dòng)后,需要加載一些配置文件至內(nèi)存中

方法

編寫普通類,繼承ApplicationListener,重寫onApplicationEvent方法

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

@SneakyThrows
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        System.out.println("所有bean加載完之后開(kāi)始執(zhí)行....");
    }

}

Springboot中Bean的加載順序

一、為什么要控制

當(dāng)你在項(xiàng)目啟動(dòng)時(shí)需要提前做一個(gè)業(yè)務(wù)的初始化工作時(shí),或者你正在開(kāi)發(fā)某個(gè)中間件需要完成自動(dòng)裝配時(shí)。

你會(huì)聲明自己的Configuration類,但是可能你面對(duì)的是好幾個(gè)有互相依賴的Bean。

如果不加以控制,這時(shí)候可能會(huì)報(bào)找不到依賴的錯(cuò)誤,這個(gè)時(shí)候需要通過(guò)一些手段來(lái)控制springboot中的bean加載順序。

二、怎么控制

@DependsOn

@DependsOn注解可以用來(lái)控制bean的創(chuàng)建順序,該注解用于聲明當(dāng)前bean依賴于另外一個(gè)bean。所依賴的bean會(huì)被容器確保在當(dāng)前bean實(shí)例化之前被實(shí)例化。

與@Component或@Bean配合使用 

demo

@Slf4j
@Configuration
@ConfigurationProperties(prefix = "dict")
public class SpringConfig {
    @Component(value = "EventSource")
    public class EventSource {
        public EventSource(){
            System.out.println("事件源創(chuàng)建");
        }
    }
    /**
     * 監(jiān)聽(tīng)類
     */
    @Component
    @DependsOn(value = {"EventSource"})
    public class EventTListener {

        public EventTListener(){
            System.out.println("監(jiān)聽(tīng)器創(chuàng)建");
        }
    }
}

參數(shù)注入

package com.sinosoft.springbootplus.test.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;

/**
 * @author lsh
 * @date 2022/2/25
 */
@Slf4j
@Configuration
@ConfigurationProperties(prefix = "dict")
public class SpringConfig {
    @Component
    public class Event{
        public Event(){
            System.out.println("事件事件");
        }
    }
    
    @Component
    public class EventSource{
        public EventSource(Event e){
            System.out.println("事件源創(chuàng)建");
        }
    }


    @Component
    public class EventTListener {

        public EventTListener(){
            System.out.println("監(jiān)聽(tīng)器創(chuàng)建");
        }
    }
}

利用bean的生命周期中的擴(kuò)展點(diǎn)

@AutoConfigureOrder

@AutoConfigureOrder只能改變外部依賴的@Configuration的順序。

這是不對(duì)的用法

@Slf4j
@Configuration
@ConfigurationProperties(prefix = "dict")
public class SpringConfig {
    @Component
    @AutoConfigureOrder(1)
    public class Event{
        public Event(){
            System.out.println("事件事件");
        }
    }

    @Component
    @AutoConfigureOrder(2)
    public class EventSource{
        public EventSource(Event e){
            System.out.println("事件源創(chuàng)建");
        }
    }


    @Component
    @AutoConfigureOrder(3)
    public class EventTListener {

        public EventTListener(){
            System.out.println("監(jiān)聽(tīng)器創(chuàng)建");
        }
    }
}

以上內(nèi)容發(fā)現(xiàn),在config里配置是不起作用的。

這是正確的用法

創(chuàng)建兩個(gè)配置類

@Slf4j
@Configuration
@AutoConfigureOrder(1)
public class SpringConfig {
    @Component
    public class Event{
        public Event(){
            System.out.println("首先在SpringConfig");
        }
    }

}


@Slf4j
@Configuration
@AutoConfigureOrder(2)
public class NewConfig {
    @Component
    public class Event{
        public Event(){
            System.out.println("然后在NewConfig");
        }
    }
}

測(cè)試

發(fā)現(xiàn)結(jié)果是不正確的,注解還是沒(méi)有生效。

當(dāng)前工程里增加配置 META-INF/spring.factories,內(nèi)容為項(xiàng)目中的配置類

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.sinosoft.springbootplus.common.config.NewConfig,com.sinosoft.springbootplus.common.config.SpringConfig

測(cè)試結(jié)果如圖(正確)

三、遇到的問(wèn)題

1、需要根據(jù)配置決定生成哪個(gè)實(shí)現(xiàn)類。

當(dāng)在配置文件中配置的dict.cacheType的值是local時(shí),初始化LocalISysDictRepository交給spring容器管理;當(dāng)項(xiàng)目依賴了redis并且配置文件中配置的dict.cacheType的值是redis時(shí),初始化RedisISysDictRepository交給spring容器管理。

2、但是我又在這兩個(gè)實(shí)現(xiàn)類上加了@Repository注解,也要交給Spring管理,這個(gè)時(shí)候項(xiàng)目啟動(dòng)就報(bào)錯(cuò)了。(通俗的來(lái)說(shuō)一個(gè)類只能一次交給Spring管理)

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • IDEA?隱藏DEBUG日志的解決方法

    IDEA?隱藏DEBUG日志的解決方法

    IDEA?打印太多的DEBUG日志,看起來(lái)很煩,有沒(méi)有辦法隱藏日志,網(wǎng)上找了一圈,沒(méi)有誰(shuí)寫的靠譜的,下面小編給大家分享下IDEA?如何隱藏DEBUG日志,需要的朋友可以參考下
    2022-09-09
  • maven加入spring框架的詳細(xì)教程

    maven加入spring框架的詳細(xì)教程

    這篇文章主要介紹了maven加入spring框架的詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • SpringBoot集成swagger3.0指南分享

    SpringBoot集成swagger3.0指南分享

    本文介紹了如何在Spring Boot項(xiàng)目中集成Swagger 3.0,包括添加依賴、配置Swagger、在Controller上添加注解以及配置訪問(wèn)權(quán)限
    2024-11-11
  • Java?String類的理解及字符串常量池介紹

    Java?String類的理解及字符串常量池介紹

    這篇文章主要介紹了Java?String類的理解及字符串常量池介紹,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • mybatis resultmap 如何為對(duì)象賦值的調(diào)用順序

    mybatis resultmap 如何為對(duì)象賦值的調(diào)用順序

    這篇文章主要介紹了mybatis resultmap 如何為對(duì)象賦值的調(diào)用順序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • springboot實(shí)現(xiàn)上傳并解析Excel過(guò)程解析

    springboot實(shí)現(xiàn)上傳并解析Excel過(guò)程解析

    這篇文章主要介紹了springboot實(shí)現(xiàn)上傳并解析Excel過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • java圖論弗洛伊德和迪杰斯特拉算法解決最短路徑問(wèn)題

    java圖論弗洛伊德和迪杰斯特拉算法解決最短路徑問(wèn)題

    這篇文章主要為大家介紹了java圖論弗洛伊德算法和迪杰斯特拉算法解決最短路徑的問(wèn)題示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • Spring interceptor攔截器配置及用法解析

    Spring interceptor攔截器配置及用法解析

    這篇文章主要介紹了Spring interceptor攔截器配置及用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 深入理解Java抽象類

    深入理解Java抽象類

    這篇文章主要介紹了Java抽象類的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-08-08
  • SpringBoot訪問(wèn)請(qǐng)求404解決方法

    SpringBoot訪問(wèn)請(qǐng)求404解決方法

    這篇文章主要介紹了SpringBoot訪問(wèn)請(qǐng)求404解決方法,文中有詳細(xì)的解決方法供大家參考,對(duì)我們學(xué)習(xí)或工作有一定的幫助,需要的朋友跟著小編一起來(lái)學(xué)習(xí)吧
    2023-07-07

最新評(píng)論