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

SpringBoot底層注解超詳細(xì)介紹

 更新時(shí)間:2022年09月30日 15:42:05   作者:劉婉晴  
這篇文章主要介紹了SpringBoot底層注解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧

1. @Configuration

—— 放在類前注釋 用于表示配置類,配置類也是一個(gè)組件

@Configuration(proxyBeanMethods = true) // 配置類 == 配置文件
public class MyConfig {
}

通過 proxyBeanMethods 很好的解決了組件依賴的問題 ——

  • 只是注冊組件,組件間無依賴(false)
  • 有組件依賴(true)

測試組件依賴及測試類本身是組件

		// 配置類本身也是一個(gè)組件
        MyConfig bean = run.getBean(MyConfig.class);
        System.out.println(bean);
        run.getBean("user01", User.class);
        run.getBean("tom", Pet.class);
        System.out.println("用戶的寵物是不是容器中的寵物" + (user01.getPet() == tom01));

2. @bean

—— 放在方法前表示給容器中注冊組件 (單實(shí)例)

注:目前我對容器、組件的理解有限, 后期如果有更深入的理解,會更新此處

    @Bean // 給容器中添加組件,方法名作為組件id, 返回類型是組件類型 , 返回的值是組件在容器中的實(shí)例
    public User user01(){
        User zangsan = new User("zangsan", 18);
        zangsan.setPet(tomcatPet());
        return zangsan;
    }

測試是否注冊成功

		ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
        // 查看容器里的組件
        String[] names = run.getBeanDefinitionNames();
        for(String s: names){
            System.out.println(s);
        }

3. @Import

—— 放在配置類前,用于導(dǎo)入組件

@Import({User.class, DBHelper.class}) // 給容器中自動(dòng)創(chuàng)建出這兩個(gè)類型的組件
@Configuration // 配置類 == 配置文件
public class MyConfig {
}

測試導(dǎo)入組件是否成功

DBHelper bean1 = run.getBean(DBHelper.class);

4. @Conditional條件裝配

—— 用于注冊組件需要特定條件的情況

例如: 用戶需要寵物,若無寵物tom組件,不能注冊用戶組件

    @ConditionalOnBean(name = "tom") // 表示有 tom 組件才能注冊 user01 組件
    @Bean // 給容器中添加組件,方法名作為組件id, 返回類型是組件類型 , 返回的值是組件在容器中的實(shí)例
    public User user01(){
        User zangsan = new User("zangsan", 18);
        zangsan.setPet(tomcatPet());
        return zangsan;
    }

測試

        System.out.println("容器中是否含有寵物組件" + run.containsBean("tom"));
        System.out.println("容器中是否含有用戶組件" + run.containsBean("user01"));

5. 配置綁定

綁定核心配置文件 (application.properities)

方法一:

@Component // 將組件加到容器中
@ConfigurationProperties(prefix = "mycar") // 配置屬性名

方法二:

// 功能一:開啟Car的屬性配置
// 功能二:把指定的組件導(dǎo)入容器中
@EnableConfigurationProperties(Car.class)

測試類:

    @Autowired
    Car car;
    @RequestMapping("/car")
    public  Car car(){
        System.out.println(car);
        return  car;
    }

SpringBoot自動(dòng)配置原理(源碼分析)

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration  // 當(dāng)前是一個(gè)配置類
@EnableAutoConfiguration  
@ComponentScan( // 指定掃描那些Spring注解
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)

@EnableAutoConfiguration

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage //——@Import({AutoConfigurationPackages.Registrar.class})
@Import({AutoConfigurationImportSelector.class})

核心注解1:

@AutoConfigurationPackage 利用Registrar給容器中批量注冊組件

—— 將指定包下的組件批量導(dǎo)入 (MainAppliaction 包下)

核心注解2

@Import({AutoConfigurationImportSelector.class})

—— 利用 getAutoConfigurationEntry() 方法給容器中批量導(dǎo)入組件

配置類位置

總結(jié): SpringBoot 所有自動(dòng)配置全部加載, 按照條件裝配 —— 導(dǎo)入相關(guān)場景才能生效

  • springboot 加載所有自動(dòng)配置類, 按條件生效 —— 生效的配置類為容器中裝配組件(默認(rèn)綁定配置文件中的值)
  • 用戶有自己配置的組件, 以用戶的為先
  • 定制化配置 —— 自己替換底層組件 / 修改底層組件配置文件中的值

到此這篇關(guān)于SpringBoot底層注解超詳細(xì)介紹的文章就介紹到這了,更多相關(guān)SpringBoot底層注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot整合Lombok插件與使用詳解

    SpringBoot整合Lombok插件與使用詳解

    Lombok是Java開發(fā)的插件,通過注解自動(dòng)生成常用代碼,如getter/setter,節(jié)省開發(fā)時(shí)間,提高效率,它在編譯期生成方法,不影響性能,安裝Lombok需要添加Maven依賴和IDEA插件,使用注解如@Data、@Getter等簡化代碼編寫,官網(wǎng)提供詳細(xì)文檔
    2024-09-09
  • java jdk1.8 使用stream流進(jìn)行l(wèi)ist 分組歸類操作

    java jdk1.8 使用stream流進(jìn)行l(wèi)ist 分組歸類操作

    這篇文章主要介紹了java jdk1.8 使用stream流進(jìn)行l(wèi)ist 分組歸類操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • logback如何自定義日志存儲

    logback如何自定義日志存儲

    這篇文章主要介紹了logback如何自定義日志存儲的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 簡單說說JVM堆區(qū)的相關(guān)知識

    簡單說說JVM堆區(qū)的相關(guān)知識

    今天給大家?guī)淼氖顷P(guān)于Java虛擬機(jī)的相關(guān)知識,文章圍繞著JVM堆區(qū)展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java之Spring AOP 實(shí)現(xiàn)用戶權(quán)限驗(yàn)證

    Java之Spring AOP 實(shí)現(xiàn)用戶權(quán)限驗(yàn)證

    本篇文章主要介紹了Java之Spring AOP 實(shí)現(xiàn)用戶權(quán)限驗(yàn)證,用戶登錄、權(quán)限管理這些是必不可少的業(yè)務(wù)邏輯,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-02-02
  • Java中HashTable和HashMap的區(qū)別_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java中HashTable和HashMap的區(qū)別_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    HashTable和HashMap主要的區(qū)別有:線程安全性,同步(synchronization),以及速度。接下來通過本文給大家簡單介紹下HashTable和HashMap的區(qū)別,需要的的朋友參考下吧
    2017-04-04
  • Java中MyBatis的動(dòng)態(tài)語句詳解

    Java中MyBatis的動(dòng)態(tài)語句詳解

    這篇文章主要介紹了Java中MyBatis的動(dòng)態(tài)語句詳解,動(dòng)態(tài) SQL 是 MyBatis 的強(qiáng)大特性之一,通過不同參數(shù)生成不同的 SQL,可以動(dòng)態(tài)地對數(shù)據(jù)持久層進(jìn)行操作,而不需要每個(gè)數(shù)據(jù)訪問操作都要進(jìn)行手動(dòng)地拼接 SQL 語句,需要的朋友可以參考下
    2023-08-08
  • java開發(fā)之鬧鐘的實(shí)現(xiàn)代碼

    java開發(fā)之鬧鐘的實(shí)現(xiàn)代碼

    本篇文章介紹了,在java中鬧鐘的實(shí)現(xiàn)代碼。需要的朋友參考下
    2013-05-05
  • Mybatis中一條SQL使用兩個(gè)foreach的問題及解決

    Mybatis中一條SQL使用兩個(gè)foreach的問題及解決

    這篇文章主要介紹了Mybatis中一條SQL使用兩個(gè)foreach的問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java中字符串轉(zhuǎn)int數(shù)據(jù)類型的三種方式

    Java中字符串轉(zhuǎn)int數(shù)據(jù)類型的三種方式

    這篇文章主要介紹了Java中字符串轉(zhuǎn)int數(shù)據(jù)類型的三種方式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03

最新評論