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

SpringBoot使用@EnableAutoConfiguration實現(xiàn)自動配置詳解

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

@EnableAutoConfiguration注解

其實SpringBoot自動配置的原理主要是用的這個@EnableAutoConfiguration注解,其原理為以下三點:

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

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

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

一個簡單的案例

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

一個簡單的需求:讓SpringBoot自動幫我們創(chuàng)建一個User和Role的Bean對象。

第一步,自定義配置類

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實現(xiàn)類來加載自定義的配置類,這就對應(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項目啟動時,會自動加載配置類,初始化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);
    }
}

這時候我們來看一下控制臺打印結(jié)果:

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

這時候就對應(yīng)原理(3),并不是所有的Bean都會被初始化,因為我在自定義的UserConfig配置類中,在User上加上了@ConditionalOnProperty(name = “lxr”,havingValue = “20”)條件注解,只有當(dāng)我的配置文件application.properties中有這個鍵值對時才能夠創(chuàng)建User對象。

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

總結(jié)

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

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

相關(guān)文章

  • Java基于Guava Retrying實現(xiàn)重試功能

    Java基于Guava Retrying實現(xiàn)重試功能

    這篇文章主要介紹了Java基于Guava Retrying實現(xiàn)重試功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Spring+SpringMVC+MyBatis深入學(xué)習(xí)及搭建(三)之MyBatis全局配置文件解析

    Spring+SpringMVC+MyBatis深入學(xué)習(xí)及搭建(三)之MyBatis全局配置文件解析

    這篇文章主要介紹了Spring+SpringMVC+MyBatis深入學(xué)習(xí)及搭建(三)之MyBatis全局配置文件解析,需要的朋友可以參考下
    2017-05-05
  • 徹底理解Spring注解@Autowired實現(xiàn)原理

    徹底理解Spring注解@Autowired實現(xiàn)原理

    這篇文章主要為大家詳細(xì)的介紹了Spring注解@Autowired實現(xiàn)的原理,縝密的邏輯分析,實踐應(yīng)用示例操作說明,讓大家徹底的理解Spring注解@Autowired背后實現(xiàn)原理
    2022-03-03
  • SpringBoot中多環(huán)境配置和@Profile注解示例詳解

    SpringBoot中多環(huán)境配置和@Profile注解示例詳解

    這篇文章主要介紹了SpringBoot中多環(huán)境配置和@Profile注解,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • 詳解Java中Stream流的用法和原理

    詳解Java中Stream流的用法和原理

    最近編碼的時候用到了Stream這個東西,以前也用過,但是對它沒有一個系統(tǒng)的認(rèn)知,在好奇心的驅(qū)動下還是決定花一些時間去系統(tǒng)地學(xué)一學(xué),不了解Stream的同學(xué)可以看看本文,對大家的學(xué)習(xí)和工作有一定的幫助
    2023-10-10
  • Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type異常

    Caused by: java.lang.ClassNotFoundException: org.objectweb.a

    這篇文章主要介紹了Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type異常,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • java web上傳文件和下載文件代碼片段分享

    java web上傳文件和下載文件代碼片段分享

    這篇文章主要為大家詳細(xì)介紹了java web上傳文件和下載文件代碼片段,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 解決使用IDEA時跳轉(zhuǎn)到.class的問題

    解決使用IDEA時跳轉(zhuǎn)到.class的問題

    這篇文章主要介紹了解決使用IDEA時跳轉(zhuǎn)到.class的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Centos中安裝jdk案例講解

    Centos中安裝jdk案例講解

    這篇文章主要介紹了Centos中安裝jdk案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • java實現(xiàn)簡單QQ登錄界面

    java實現(xiàn)簡單QQ登錄界面

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)簡單QQ登錄界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05

最新評論