最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot使用@EnableAutoConfiguration實(shí)現(xiàn)自動(dòng)配置詳解

 更新時(shí)間:2022年08月16日 15:22:42   作者:lxrqiyuan  
你有想過SpringBoot為什么能夠自動(dòng)的幫我們創(chuàng)建一個(gè)Bean對(duì)象么?或許在我們使用的時(shí)候只需要在自己自定義的配置文件中加入@Bean對(duì)象就可以,但SpringBoot是如何來(lái)創(chuàng)建的呢

@EnableAutoConfiguration注解

其實(shí)SpringBoot自動(dòng)配置的原理主要是用的這個(gè)@EnableAutoConfiguration注解,其原理為以下三點(diǎn):

(1)在@EnableAutoConfiguration注解內(nèi)部使用@Import(AutoConfigurationImportSelector.class)來(lái)加載配置類;

(2)配置文件位置:META-INF/spring.factories,該配置文件中定義了大量的配置類,當(dāng)SpringBoot項(xiàng)目啟動(dòng)時(shí),會(huì)自動(dòng)加載這些配置類,初始化Bean;

(3)并不是所有的Bean都會(huì)被初始化,在配置類文件中使用Condition來(lái)加載滿足條件的Bean。

一個(gè)簡(jiǎn)單的案例

上面的原理看上去還是不太好理解的,這個(gè)需要查看源碼結(jié)合理解,接下來(lái)我就就一個(gè)簡(jiǎn)單的例子來(lái)解釋一下。

一個(gè)簡(jiǎn)單的需求:讓SpringBoot自動(dòng)幫我們創(chuàng)建一個(gè)User和Role的Bean對(duì)象。

第一步,自定義配置類

package cs.yangtze.springboot_enable_other.config;
import cs.yangtze.springboot_enable_other.entity.Role;
import cs.yangtze.springboot_enable_other.entity.User;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class UserConfig {
    @Bean
    @ConditionalOnProperty(name = "lxr",havingValue = "20")
    public User user(){
        return new User();
    }
    @Bean
    public Role role(){
        return new Role();
    }
}

第二步,ImportSelector實(shí)現(xiàn)類來(lái)加載自定義的配置類,這就對(duì)應(yīng)原理的(1)

package cs.yangtze.springboot_enable_other.config;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;
public class MyImportSelect implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
{"cs.yangtze.springboot_enable_other.config.UserConfig"};
    }
}

原理(2)中配置文件位置是這樣的,但我們自己自定義的配置文件位置不一樣,當(dāng)SpringBoot項(xiàng)目啟動(dòng)時(shí),會(huì)自動(dòng)加載配置類,初始化Bean

@Import(MyImportSelect.class)
@SpringBootApplication
public class SpringbootEnableApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(SpringbootEnableApplication.class, args);
        Role role =context.getBean(Role.class);
        System.out.println(role);
        User user = context.getBean(User.class);
        System.out.println(user);
    }
}

這時(shí)候我們來(lái)看一下控制臺(tái)打印結(jié)果:

我們會(huì)發(fā)現(xiàn),Role的Bean對(duì)象正常打印了,但是User的并沒有,這是為什么?

這時(shí)候就對(duì)應(yīng)原理(3),并不是所有的Bean都會(huì)被初始化,因?yàn)槲以谧远x的UserConfig配置類中,在User上加上了@ConditionalOnProperty(name = “lxr”,havingValue = “20”)條件注解,只有當(dāng)我的配置文件application.properties中有這個(gè)鍵值對(duì)時(shí)才能夠創(chuàng)建User對(duì)象。

最終也是得到正確結(jié)果

總結(jié)

SpringBoot自動(dòng)配置的原理就是以上三點(diǎn),我舉的例子應(yīng)該能夠很好地幫助你理解,如果有什么不對(duì)的地方還請(qǐng)大家批評(píng)指正,這也是我看了幾遍視頻后的理解。

到此這篇關(guān)于SpringBoot使用@EnableAutoConfiguration實(shí)現(xiàn)自動(dòng)配置詳解的文章就介紹到這了,更多相關(guān)SpringBoot @EnableAutoConfiguration內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot項(xiàng)目配置多個(gè)kafka的示例代碼

    springboot項(xiàng)目配置多個(gè)kafka的示例代碼

    這篇文章主要介紹了springboot項(xiàng)目配置多個(gè)kafka,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Java實(shí)現(xiàn)合并word文檔的示例代碼

    Java實(shí)現(xiàn)合并word文檔的示例代碼

    在做項(xiàng)目中,經(jīng)常會(huì)遇到一種情況,需要將一個(gè)小word文檔的內(nèi)容插入到一個(gè)大word(主文檔)中。本文就為大家準(zhǔn)備了Java實(shí)現(xiàn)合并word文檔的方法,需要的可以參考一下
    2022-08-08
  • JDK8新出Optional類的方法探索與思考分析

    JDK8新出Optional類的方法探索與思考分析

    這篇文章主要為大家介紹了JDK8新出Optional類的發(fā)方法示例探索與思考分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • 詳解Eclipse Validating緩慢的優(yōu)化

    詳解Eclipse Validating緩慢的優(yōu)化

    這篇文章主要介紹了詳解Eclipse Validating緩慢的優(yōu)化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • SpringMvc自動(dòng)裝箱及GET請(qǐng)求參數(shù)原理解析

    SpringMvc自動(dòng)裝箱及GET請(qǐng)求參數(shù)原理解析

    這篇文章主要介紹了SpringMvc自動(dòng)裝箱及GET請(qǐng)求參數(shù)原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Seata?AT模式前后鏡像是如何生成詳解

    Seata?AT模式前后鏡像是如何生成詳解

    這篇文章主要為大家介紹了Seata?AT模式前后鏡像是如何生成的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • java自定義JDBC實(shí)現(xiàn)連接池

    java自定義JDBC實(shí)現(xiàn)連接池

    本文主要介紹了java自定義JDBC實(shí)現(xiàn)連接池,包含實(shí)現(xiàn)JDBC連接池以及SQLException?異常的處理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • spring+shiro 整合實(shí)例代碼詳解

    spring+shiro 整合實(shí)例代碼詳解

    本文通過實(shí)例代碼給大家介紹spring+shiro 整合的過程,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-10-10
  • spring事務(wù)Propagation及其實(shí)現(xiàn)原理詳解

    spring事務(wù)Propagation及其實(shí)現(xiàn)原理詳解

    這篇文章主要介紹了spring事務(wù)Propagation及其實(shí)現(xiàn)原理詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • druid?handleException執(zhí)行流程源碼解析

    druid?handleException執(zhí)行流程源碼解析

    這篇文章主要為大家介紹了druid?handleException執(zhí)行流程源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09

最新評(píng)論

舟山市| 林口县| 侯马市| 微博| 扎鲁特旗| 玉山县| 棋牌| 邹城市| 仪征市| 巫溪县| 长兴县| 尚义县| 建昌县| 中江县| 临湘市| 太湖县| 兴仁县| 河北省| 莲花县| 凤阳县| 千阳县| 雅安市| 永兴县| 洛宁县| 江陵县| 福贡县| 永吉县| 贵德县| 定日县| 遵义市| 乐清市| 伊吾县| 华坪县| 镇坪县| 红河县| 略阳县| 资源县| 余庆县| 繁昌县| 德钦县| 渑池县|