国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

蘇州驚天網(wǎng)站制作網(wǎng)想要推廣網(wǎng)頁正式版

蘇州驚天網(wǎng)站制作網(wǎng),想要推廣網(wǎng)頁正式版,北京網(wǎng)站建設(shè)代理,wordpress論壇模版一、SpringBootConfiguration注解的作用 SpringBootApplication注解是SpringBoot項目的核心注解,加在啟動引導(dǎo)類上。點擊進去可以發(fā)現(xiàn)SpringBootApplication注解是一個組合注解。其中SpringBootConfiguration和EnableAutoConfiguration是由Spring提供的,剩下的注解是由JDK提供的…

一、@SpringBootConfiguration注解的作用

????????????????@SpringBootApplication注解是SpringBoot項目的核心注解,加在啟動引導(dǎo)類上。點擊進去可以發(fā)現(xiàn)@SpringBootApplication注解是一個組合注解。其中@SpringBootConfiguration@EnableAutoConfiguration是由Spring提供的,剩下的注解是由JDK提供的。對于SpringBoot項目,我們重點分析@SpringBootConfiguration和@EnableAutoConfiguration注解。

1.1、@SpringBootConfiguration表示啟動引導(dǎo)類是一個配置類

? ? ? ??點擊@SpringBootConfiguration注解進去可以發(fā)現(xiàn)@SpringBootConfiguration注解也是一個組合注解,并且繼承了@Configuration注解,說明@SpringBootApplication注解間接繼承了

@Configuration注解。

????????@Configuration注解又加在了啟動引導(dǎo)類上面,說明啟動引導(dǎo)類是一個配置類,配置類中加了@Bean注解的方法的返回值會放入Spring的容器中。

代碼演示:

啟動引導(dǎo)類中添加@Bean注解的方法

package com.itboy;import com.itboy.Import.MyImportSeletor;
import com.itboy.pojo.User;
import org.example.config.BrandAutoConfiguration;
import org.example.config.UserAutoConfiguration;
import org.example.pojo.Brand;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;/*** */
@SpringBootApplicationpublic class SpringBootPlusApplication {public static void main(String[] args) {ConfigurableApplicationContext app = SpringApplication.run(SpringBootPlusApplication.class, args);User user = app.getBean(User.class);System.out.println("user = " + user);}@Beanpublic User testUser(){return new User();}}

????????運動程序,發(fā)現(xiàn)可以從容器中獲得User對象,說明添加了@Bean注解的方法的返回值放到了Spring容器中。

所以@SpringBootConfiguration注解的第一個作用就是將啟動引導(dǎo)類變成配置類。

1.2、?@SpringBootConfiguration可以讓測試類能夠找到啟動引導(dǎo)類

? ? ? ? 注釋掉啟動引導(dǎo)類上面的@SpringBootApplication注解,然后啟動@SpringBootTest測試類中的測試方法,會發(fā)現(xiàn)報錯。

Unable to find a @SpringBootConfiguration?

說明?@SpringBootTest測試類中的測試方法會去找@SpringBootConfiguration注解。

此時需要手動指定啟動引導(dǎo)類才能解決報錯問題

?

1.3、總結(jié)?

?@SpringBootConfiguration注解的作用有:

1、表示啟動引導(dǎo)類是一個配置類,因為相當(dāng)于@SpringBootApplication注解間接繼承了@Configuration注解。

2、?讓測試類能夠找到啟動引導(dǎo)類,具體的看1.2中的內(nèi)容。

二、@Import注解的作用?

?通過@Import注解中的導(dǎo)入器我們可以指定配置類。

我們在pom.xml配置文件中添加創(chuàng)建的模塊

創(chuàng)建的模塊結(jié)構(gòu)如下圖:

?

創(chuàng)建的模塊中存在兩個配置類UserAutoConfigurationBrandAutoConfiguration?

??????????????????????????????????

?

?

創(chuàng)建的模塊和我們主模塊之間的位置關(guān)系:

?

????????所以創(chuàng)建的模塊肯定不在spring_boot項目啟動引導(dǎo)類的包及其子包中。?所以在spring_boot項目的容器對象中肯定不能獲取到創(chuàng)建的模塊中的User和brand對象。

? ? ? ? 但是在啟動引導(dǎo)類上添加@Import注解就能獲取到User和brand對象。

????????通過@Import注解中的導(dǎo)入器能指定配置類有哪些,@Import注解中的值相當(dāng)于導(dǎo)入器,這里的MyImportSeletor.class是我自定義的導(dǎo)入器。

?

????????導(dǎo)入器需要實現(xiàn)ImportSelector接口,并重寫selectImports方法,返回值為字符串?dāng)?shù)組,里面的值為配置類的全限定名,通過返回值就能確定配置類有哪些。

? ? ? ? 再找到配置類中加了@Bean注解的方法,方法的返回值就會放入spring的容器中。就完成了自動裝配的工程。

總結(jié)

1、@Import注解可以通過導(dǎo)入器指定配置類。

2、@Import注解中的值是導(dǎo)入器,通過導(dǎo)入器我們可以指定配置類。

3、配置類中加了@Bean注解的方法的返回值就會放到spring容器中,從而實現(xiàn)自動裝配。

三、@EnableAutoConfiguration注解的作用?

????????@EnableAutoConfiguration注解是組合注解,繼承了@Import注解。

????????

? ? ? ? 通過二中分析我們知道可以通過@Import注解中的導(dǎo)入器找到配置類,這里的AutoConfigurationImportSelector.class就是SpringBoot定義的導(dǎo)入器,所以繼續(xù)點擊導(dǎo)入器。

? ? ? ? 發(fā)現(xiàn)AutoConfigurationImportSelector.class導(dǎo)入器中存在selectImports方法,并且方法返回值為字符串?dāng)?shù)組,與二中剛才的分析保持一致,所以這個selectImports方法就是指定配置類

 

????????if的條件判斷是返回沒有導(dǎo)入的情況,所以else里面的邏輯才是指定配置類。?

? ? ? ? 接著點擊selectImports方法中的getAutoConfigurationEntry方法,再點擊getAutoConfigurationEntry方法中的getCandidateConfigurations方法????????

????????

? ? ? ? 接著點擊?getCandidateConfigurations方法中的loadFactoryNames方法

? ??

?

? ? ? ? ?接著點擊loadFactoryNames方法中的loadSpringFactories方法

? ? ? ? 最后發(fā)現(xiàn)讀取的是META-INF文件夾里面的spring.factorie文件?

?

總結(jié):

1、?@EnableAutoConfiguration注解的作用是完成SpringBoot項目的自動裝配。

2、會去讀取META-INF文件夾里面的spring.factorie文件。

3、spring.factorie文件中定義了指定的配置類,找到配置類,并把配置類中加了@Bean注解的方法的返回值放入Spring容器就完成了自動裝配。

四、自動裝配的條件選擇

4.1、SpringBoot自帶的Starter和第三方Starter

????????SpringBoot提供的Starter是以spring-boot-starter開頭的,例如spring-boot-starter-webspring-boot-starter-test

????????????????

????????第三方提供的starter一般是以spring-boot-starter為結(jié)尾的。例如:mybatis-spring-boot-starter

? ? ? ?

?

4.2、通過在External Libraries中找到對應(yīng)的jar包

????????可以發(fā)現(xiàn)第三方Starter都會有?META-INF文件夾,并且META-INF文件夾里面肯定也會有spring.factorie文件。下面是mybatisspring.factorie文件里面的內(nèi)容。

????????

org.springframework.boot.autoconfigure.EnableAutoConfiguration是key值,固定的寫法。

里面的value值定義了配置類,mybatis定義的配置類有:

MybatisLanguageDriverAutoConfiguration

MybatisAutoConfiguration

MybatisDependsOnDatabaseInitializationDetector

?4.3、ConditionalOn.....注解決定了哪些方法返回值放入Spring容器中

? ? ? ? 打開4.2中找到的MybatisLanguageDriverAutoConfiguration配置類。

????????可以發(fā)現(xiàn)?MybatisLanguageDriverAutoConfiguration類肯定被@Configuration注解定義了,那是不是這個類所有加了@Bean注解的方法的返回值都會放入Spring容器中完成自動裝配呢?

? ? ? ? ?可以發(fā)現(xiàn)MybatisLanguageDriverAutoConfiguration類中的很多方法上面加了類似@ConditionalOnClass、@ConditionalOnMissingBean等注解,都是限制條件,所以并不是所有的加了@Bean注解的方法的返回值都會放入Spring容器中。

?

?

??總結(jié):

1、 指定的配置類中并不是所有的加了@Bean注解的方法的返回值都會放入Spring容器中。

2、?@ConditionalOnClass、@ConditionalOnMissingBean等注解,都是限制條件。

?

五、自動裝配原理總結(jié)

? ? ? ? 通過@EnableAutoConfiguration注解,會去找到第三方j(luò)ar包中META-INF文件夾里面的spring.factorie文件。

????????spring.factorie文件里面指定了配置類,再找到配置類中加了@Bean注解的方法,再找到能通過@ConditionalOnClass、@ConditionalOnMissingBean等注解的限制條件后,就會將方法返回值放入Spring的容器中。

http://m.aloenet.com.cn/news/37805.html

相關(guān)文章:

  • 山東威海網(wǎng)站開發(fā)關(guān)鍵詞推廣排名
  • 做網(wǎng)站被捉域名注冊優(yōu)惠
  • 大型門戶網(wǎng)站有哪些石家莊網(wǎng)絡(luò)推廣優(yōu)化
  • 賺錢軟件真實可靠揭陽市seo上詞外包
  • 時光軸 網(wǎng)站sem是什么電鏡
  • 免費淘寶客網(wǎng)站模板seo優(yōu)化需要做什么
  • 嘉祥網(wǎng)站建設(shè)中國數(shù)據(jù)網(wǎng)
  • 網(wǎng)站都有什么類型清遠(yuǎn)頭條新聞
  • 微信團購網(wǎng)站怎么做seo資源
  • 網(wǎng)站輪播廣告動畫怎么做南京最大網(wǎng)站建設(shè)公司
  • 更新網(wǎng)站要怎么做呢鏈接交換
  • 米課做網(wǎng)站軟文素材庫
  • 怎樣免費做網(wǎng)站視頻講解網(wǎng)絡(luò)服務(wù)電話
  • 已有網(wǎng)站做app需要多少錢寧波谷歌seo推廣
  • 北京網(wǎng)站設(shè)計制作教程滄浪seo網(wǎng)站優(yōu)化軟件
  • 哪里有網(wǎng)站建設(shè)加盟合作今日新聞最新頭條
  • wordpress所有文章網(wǎng)站排名優(yōu)化推廣
  • 上海整站優(yōu)化公司網(wǎng)絡(luò)營銷理論
  • 網(wǎng)站建設(shè)與文字的工作成都百度推廣代理公司
  • 傳奇三端互通新開服網(wǎng)站上海推廣服務(wù)
  • 西安網(wǎng)站seo優(yōu)化網(wǎng)站運營指標(biāo)
  • wordpress添加文章分類二級小紅書搜索優(yōu)化
  • 直播網(wǎng)站模板網(wǎng)站優(yōu)化推廣外包
  • 金品誠企網(wǎng)站建設(shè)b站2023年免費入口
  • 樂清網(wǎng)站關(guān)鍵詞下載
  • 不用ftp做網(wǎng)站seo工作室
  • 建網(wǎng)站的公司不肯簽合同福州seo推廣優(yōu)化
  • 微網(wǎng)站制作軟件線上線下整合營銷方案
  • 推廣業(yè)務(wù)網(wǎng)站建設(shè)網(wǎng)站服務(wù)器速度對seo有什么影響
  • 青島網(wǎng)站模板建站做推廣的都是怎么推