1:設(shè)計初衷
SpringBoot為我們開發(fā)者提供了一種更快速、體驗更好的開發(fā)方式,我們可以開箱即用,無需像寫Spring那樣配置各種XML文件,雖然Spring3.0時引入了基于java的配置,但是編寫這些配置無疑是在浪費大量時間,其實SpringBoot還內(nèi)置Tomcat
2:核心功能
復制代碼
一:獨立的運行Spring
? ? SpringBoot 可以以jar包形式獨立運行,運行一個SpringBoot項目只需要通過java -jar xx.jar來運行
二:內(nèi)置Servlet容器
? ? Spring Boot可以選擇內(nèi)嵌Tomcat、jetty或者Undertow,這樣我們無須以war包形式部署項目
三:簡化Maven配置
? ? SpringBoot提供了一系列的start pom來簡化Maven的依賴加載,例如,當你使用了spring-boot-starter-web
四:自動裝配
? ? SpringBoot會根據(jù)在類路徑中的jar包,類、為jar包里面的類自動配置Bean,這樣會極大地減少我們要使用的配置。
? ? 當然,SpringBoot只考慮大多數(shù)的開發(fā)場景,并不是所有的場景,若在實際開發(fā)中我們需要配置Bean,而SpringBoot
? ? 沒有提供支持,則可以自定義自動配置
五:準生產(chǎn)的應(yīng)用監(jiān)控
? ? SpringBoot提供基于http ssh telnet對運行時的項目進行監(jiān)控
六:無代碼生產(chǎn)和xml配置
? ? SpringBoot不是借助與代碼生成來實現(xiàn)的,而是通過條件注解來實現(xiàn)的,這是Spring4.x提供的新特性
復制代碼
Spring Boot只是Spring本身的擴展,使開發(fā),測試和部署更加方便
3:本文開發(fā)環(huán)境需求
SpringBoot 2.4.1正式發(fā)行版,要求Java8并且兼容Java15;對應(yīng)的Spring版本是5.3.2;而且要求Maven 3.3+ 但是最好使用3.5.4穩(wěn)定版本,而Servlet容器的版本為Tomcat9.0(Servlet Version 4.0)、Jetty 9.4(Servlet Version 3.1)、Undertow 2.0(Servlet Version 4.0)?
二:SpringBoot入門搭建
1:手動搭建案例
我們以一個簡單的SpringBoot案例來突顯出Spring的繁瑣,我接下來將使用SpringBoot來實現(xiàn)一個簡單的帶Controller的案例
復制代碼
第一步:使用IDEA構(gòu)建一個普通的Maven項目
第二步:在構(gòu)建好的maven工程中對pom文件修改
第三步:編寫啟動引導類
第四步:編寫Controller
第五步:訪問(默認8080端口) 以本案例http://localhost:8080/index/test
復制代碼
pom.xml里面添加相應(yīng)坐標
啟動引導類編寫
Controller編寫
2:使用Spring Initializr快速搭建
自動創(chuàng)建的Maven坐標說明
三:SpringBoot基本分析
1:坐標中starters分析及依賴管理
starter是依賴關(guān)系的整理和封裝。是一套依賴坐標的整合,可以讓導入應(yīng)用開發(fā)的依賴坐標更方便。利用依賴傳遞的特性幫我們把一些列指定功能的坐標打包成了一個starter,我們只需要導入starter即可,無需導入大量坐標;每個Starter包含了當前功能下的許多必備依賴坐標這些依賴坐標是項目開發(fā),上線和運行必須的。同時這些依賴也支持依賴傳遞。如下Starter:
復制代碼
<!--導入WEB開發(fā)Starter-->
? ? <dependency>
? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? <artifactId>spring-boot-starter-web</artifactId>
? ? </dependency>
spring-boot-starter-web內(nèi)部封裝的一些列坐標
復制代碼
封裝成各個Starter的好處就是讓我們更加專注于業(yè)務(wù)開發(fā),無需關(guān)心依賴導入,依賴沖突,及依賴的版本
問:為什么導入的一些Starter不需要寫版本呢?
不指定版本是因為maven有依賴傳遞的特性,可推測starter在父級定義了并鎖定了版本;spring-boot-dependencies.xml 文件可以給大家一個答案;繼承關(guān)系為 spring-boot-starter-parent.xml ==> spring-boot-dependencies.xml 這里面鎖定了我們常用的坐標及Stater
編寫SpringBoot項目繼承spring-boot-starter-parent的好處和特點
①:默認編譯Java 1.8
②:默認編碼UTF-8
③:通過spring-boot-denpendencies的pom管理所有公共Starter依賴的版本
④:spring-boot-denpendencies通過Maven的依賴傳遞和版本鎖定特性來實現(xiàn)版本管理
⑤:隨用隨取,不用繼承父類所有的starter依賴。
POM文件中的Maven插件功能
復制代碼
<build>
<plugins>
? ? ? ? <!-- 作用:將一個SpringBoot的工程打包成為可執(zhí)行的jar包 -->
? <plugin>
? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? ? <artifactId>spring-boot-maven-plugin</artifactId>
? </plugin>
</plugins>
</build>
復制代碼
補充:可選擇的啟動器官網(wǎng)介紹,需要則查詢這個手冊
2:自動配置(AutoConfiguration)分析
所有我們要配置的項目Pivotal團隊的開發(fā)人員,幫我們寫好了,怎么實現(xiàn)的,主要是通過@Configuration實現(xiàn) SpringBoot采用約定大于配置設(shè)計思想,將所有可能遇到的配置信息提前配置好,寫在自動配置的jar包中。每個Starter基本都會有對應(yīng)的自動配置。SpringBoot幫我們將配置信息寫好,存放在一個jar包中:spring-boot-autoconfigure-2.4.1.jar;jar包里,存放的都是配置類,讓配置類生效的"規(guī)則類"
復制代碼
接下來我來介紹一個我們常見的配置類
一:找到項目的External Libraries
二:查找Maven:org.springframework.boot:spring-autoconfigue:2.4.1
三:內(nèi)部有個spring-boot-autoconfigue-2.4.1.jar
四:點擊org ==> web ==> servlet ==> ServletWebServerFactoryAutoConfiguration類
@Configuration(proxyBeanMethods = false)? //代表是個配置類 SpringBoot為我們提供的每個配置類都有此注解
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)
@ConditionalOnClass(ServletRequest.class)
@ConditionalOnWebApplication(type = Type.SERVLET)
@EnableConfigurationProperties(ServerProperties.class)
@Import({ ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class,
? ? ? ? ServletWebServerFactoryConfiguration.EmbeddedTomcat.class,
? ? ? ? ServletWebServerFactoryConfiguration.EmbeddedJetty.class,
? ? ? ? ServletWebServerFactoryConfiguration.EmbeddedUndertow.class })
public class ServletWebServerFactoryAutoConfiguration { ... }
補充:我們回到之前點擊META-INF ==> spring.factories 這里面配置的是SpringBoot的全部配置類
補充:我們回到之前點擊META-INF ==> spring-configuration-metadata.json 這里面配置著各種配置類的信息參數(shù)
復制代碼
問:SpringBoot提供這么多配置類,難道是程序運行后就全部導入嗎?
不會全部導入,只會根據(jù)當前項目的需求選擇性的裝配所需的配置類,這也是SpringBoot的自動裝配一大特性;我們也可以設(shè)想一下,一次性裝配全部配置類,那該多慢呀;
問:SpringBoot怎么知道程序運行后就自動裝配呢?
我們找到SpringBoot入口函數(shù),點開 @SpringBootApplication 注解會發(fā)現(xiàn)里面有個 @EnableAutoConfiguration 這個注解就是開啟自動配置的
問:開啟自動裝配后,它咋知道要加載指定配置呢?那么多配置類呢
我們繼續(xù)看上面的 ServletWebServerFactoryAutoConfiguration 配置類
復制代碼
@Configuration(proxyBeanMethods = false)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)
//配置類能否被自動裝配主要看 @ConditionalOnClass注解
//此注解是否可以加載到一個叫 ServletRequest.class文件,一旦存在則自動裝配
@ConditionalOnClass(ServletRequest.class)
@ConditionalOnWebApplication(type = Type.SERVLET)
@EnableConfigurationProperties(ServerProperties.class)
@Import({ ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class,
? ? ? ? ServletWebServerFactoryConfiguration.EmbeddedTomcat.class,
? ? ? ? ServletWebServerFactoryConfiguration.EmbeddedJetty.class,
? ? ? ? ServletWebServerFactoryConfiguration.EmbeddedUndertow.class })
public class ServletWebServerFactoryAutoConfiguration { ... }
復制代碼
有了自動配置后,那么基本全部采用默認配置(這也就是為啥說約定大于配置的思想);那么要修改默認配置也是可以的,我們只需在配置文件配置指定的參數(shù)即可 官方全部可配置屬性? 如下常見配置:
復制代碼
# 端口配置
server.port=8888
# 配置context-path項目訪問根路徑
server.servlet.context-path=/demo
# 開啟debug模式,詳細日志輸出,用于開發(fā)的一種設(shè)置 默認是false
debug=true
# 配置日志? logging.level.{指定包下的日志}=debug
logging.level.cn.xw=debug
復制代碼
四:SpringBoot的配置文件
SpringBoot是約定大于配置的,配置都有默認值。如果想修改默認配置,可以使用application.properties或application.yml或application.yaml自定義配置。SpringBoot默認從Resource目錄加載自定義配置文件。application.properties是鍵值對類型;application.yml是SpringBoot中一種新的配置文件方式,在使用自定義配置時名稱一定要為application,因為是提前約定好的,而且三個后綴名的文件都寫上是有個先后順序,后面可覆蓋前面
<includes>
? ? <include>**/application*.yml</include>
? ? <include>**/application*.yaml</include>
? ? <include>**/application*.properties</include>
</includes>
三種類型文件的配置方式
1:yml/yaml配置文件語法及使用
YML文件格式是YAML(YAML Aint Markup Language)編寫的文件格式??梢灾庇^被電腦識別的格式。容易閱讀,容易與腳本語言交互。可以支持各種編程語言(C/C++、Ruby、Python、Java、Perl、C#、PHP)。以數(shù)據(jù)為核心,比XML更簡潔。擴展名為.yml或.yaml? 官方網(wǎng)站? 在線properties轉(zhuǎn)yml
復制代碼
1:大小寫敏感
2:數(shù)據(jù)值前邊必須有空格,作為分隔符
3:使用縮進表示層級關(guān)系
4:縮進不允許使用tab,只允許空格
5:縮進的空格數(shù)不重要,只要相同層級的元素左對齊即可
6:"#"表示注釋,從這個字符一直到行尾,都會被解析器忽略。
7:數(shù)組和集合使用 "-" 表示數(shù)組每個元素
復制代碼
yml基本格式寫法
2:配置文件與配置類屬性映射
(1):java配置獲取基本的配置文件信息.properties類型
基本數(shù)據(jù)獲取.properties
(2):java配置獲取基本的配置文件信息并注入.yml/.yaml類型
復制代碼
1、使用注解@Value映射
@value注解將配置文件的值映射到Spring管理的Bean屬性值,只能映射基本數(shù)據(jù)類型
2、使用注解@ConfigurationProperties映射
通過注解@ConfigurationProperties(prefix=''配置文件中的key的前綴")可以將配置文件中的配置自動與實體進行映射。
使用@ConfigurationProperties方式必須提供Setter方法,使用@Value注解不需要Setter方法
注:使用@ConfigurationProperties要在主函數(shù)上開啟@EnableConfigurationProperties
復制代碼
POJO實體類
application.yml配置文件
復制代碼
//通過web的方式加載程序運行
@RestController //結(jié)合@ResponseBody 和 @Controller 兩注解
@RequestMapping("/index")
public class IndexController {
? ? //注入
? ? @Autowired
? ? private Student student;
? ? @RequestMapping("/test")
? ? public String testMethod() {
? ? ? ? System.out.println(student.toString());
? ? ? ? //Student{
? ? ? ? // id=1001,
? ? ? ? // name='張三',
? ? ? ? // address='安徽六安',
? ? ? ? // hobbys=[baseball, basketball, volleyball],
? ? ? ? // score={yuwen=[66, 88], shuxue=[85, 99]},
? ? ? ? // teachers={yuwenTeacher=Teacher{name='張老師', message='教語文'},
? ? ? ? // shuxueTecher=Teacher{name='李老師', message='教數(shù)學'}}}
? ? ? ? return "Hello !!";
? ? }
}
復制代碼
五:SpringBoot與其它技術(shù)集成
1:SpringBoot集成MyBatis? 建表語句
集成Mybatis完成查詢?nèi)?/p>
(1):使用注解方式完成集成
pom.xml文件
resources下的application.yml配置文件
POJO、Mapper、Service、Controller文件
注:使用http://localhost:8080/student/findAll訪問,還有就是Mapper文件夾里面的代碼一定要寫在主函數(shù)類當前包及其子包下,如果不在則需要在入口類添加@MapperScan或者@MapperScans注解掃描一下,這個是mybatis提供的
(2):使用Mapper.xml映射完成集成
更改application.yml
在resources下創(chuàng)建mapper/StudentMapper.xml
刪除之前在Mapper使用注解的SQL語句刪除,只留方法
2:Spring Boot 集成 Redis
springBoot集成Redis后,以上個案例的基礎(chǔ)上做個查詢學生緩存,如果第一次查詢則緩存到redis服務(wù)器里,然后從redis讀取數(shù)據(jù)返回到客戶端
<!--導入redis啟動器-->
<dependency>
? ? ? <groupId>org.springframework.boot</groupId>
? ? ? <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
更改StudentController
3:Spring Boot 集成定時器
? 使用SpringBoot完成一個簡易的定時器,每5秒輸出一下當前的時間到控制臺;
首先在入口函數(shù)類上面加@EnableScheduling注解,代表開啟定時器
編寫定時器類
4:Spring Boot 集成Test單元測試
復制代碼
<!--測試啟動start-->
<dependency>
? ? <groupId>org.springframework.boot</groupId>
? ? <artifactId>spring-boot-starter-test</artifactId>
? ? <scope>test</scope>
</dependency>
復制代碼
復制代碼
//@RunWith(SpringRunner.class) 在老版的SpringBoot項目需要這個
//2.2.0.RELEASE以后,springboot測試類不再需要@Runwith的注解
@SpringBootTest //注明為SpringBoot測試類
class DemomybatissApplicationTests {
? ? //注入StudentService對象
? ? @Autowired
? ? private StudentService studentService;
? ? @Test
? ? void contextLoads() {
? ? ? ? System.out.println(studentService.findAll());
? ? }
}
復制代碼
5:Spring Boot 發(fā)送HTTP請求
要在SpringBoot內(nèi)部發(fā)送HTTP請求就得用到RestTemplate模板,它是Rest的HTTP客戶端模板工具類;對基于HTTP客戶端進行了封裝;還實現(xiàn)了對象與JSON的序列化與反序列化;不限定客戶端類型,目前常用的3種客戶端都支持:HttpClient、OKHttp、JDK原生URLConnection(默認方式)
入口函數(shù)類更改
編寫RestTemplate發(fā)送Http請求測試類
6:擴展
SpringBoot除了上面幾個集成外還集成 MongoDB、ElasticSearch、Memcached、郵件服務(wù):普通郵件、模板郵件、驗證碼、帶Html的郵件、RabbitMQ消息中間件、Freemarker或者Thymeleaf等等
六:SpringBoot打包部署
啟動方式有兩種,一種是打成jar直接執(zhí)行,另一種是打包成war包放到Tomcat服務(wù)下,啟動Tomcat
1:打成Jar包部署運行
注:pom文件里的<packaging>jar</packaging>必須為jar,默認就是jar
復制代碼
/**
* 第一步:使用IDEA工具把寫的代碼通過maven的package打包
* 第二步:找到打包后的target文件夾里面,把xxx.jar包扔給測試
* 第三步:自己測試的話使用cmd執(zhí)行下面命令,前提得檢查自己的pom.xml文件中是否有springboot的maven插件
* java -jar? xxxx.jar
* 補充:在運行的時候傳遞參數(shù) 通過main函數(shù)的args接收
* java -jar? xxxx.jar --server.port=8888
* 補充:在運行的時候配置jvm參數(shù),使占用更少的內(nèi)存
* java -Xmx80m -Xms20m -jar xxxx.jar
*/
復制代碼
2:打成War包部署運行
注:pom文件里的<packaging>war</packaging>必須為jar,默認就是war
復制代碼
創(chuàng)建一個類如:ServletInitializer.java,繼承 SpringBootServletInitializer ,覆蓋 configure(),
把啟動類 Application 注冊進去。外部 Web 應(yīng)用服務(wù)器構(gòu)建 Web Application Context 的時候,
會把啟動類添加進去。
//如下代碼創(chuàng)建的類 除了類名和注冊的啟動類不一樣,其它是固定寫法
//WEB-INF/web.xml
public class ServletInitializer extends SpringBootServletInitializer {
? ? @Override
? ? protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
? ? ? ? //DemoApplication是自己當前項目的主函數(shù)
? ? ? ? return builder.sources(DemoApplication.class);
? ? }
}
復制代碼
七:SpringBoot熱部署
我們在之前每次寫完代碼之后都要重新部署運行,這樣特別浪費時間,其實SpringBoot是支持熱部署的,但是我們得有相對應(yīng)的參數(shù)配置,導入坐標
復制代碼
檢查當前的pom.xml必須有此配置才可以,然后正常啟動運行即可
<!--工具 用于設(shè)置熱部署,optional必須為true-->
<dependency>
? ? <groupId>org.springframework.boot</groupId>
? ? <artifactId>spring-boot-devtools</artifactId>
? ? <scope>runtime</scope>
? ? <optional>true</optional>
</dependency>
復制代碼
當我們的代碼寫文運行后,后期更改了代碼無需重寫部署,只需要按CTRL+F9(Build Project),這是快速構(gòu)建項目,或點擊有上角的錘子;
如果還覺得麻煩,那就設(shè)置,一旦更改代碼,IDEA失去焦點就自動構(gòu)建代碼,我們要設(shè)置一下IDEA配置
八:SpringBoot配置文件深入
1:多環(huán)境配置文件
我們在開發(fā)Spring Boot應(yīng)用時,通常同一套程序會被安裝到不同環(huán)境,比如:開發(fā)dev、測試test、生產(chǎn)pro等。其中數(shù)據(jù)庫地址、服務(wù)器端口等等配置都不同,如果每次打包時,都要修改配置文件,那么非常麻煩。profile功能就是來進行動態(tài)配置切換的。
(1):單文件的多環(huán)境配置
單個application.yml配置文件完成多環(huán)境配置? 不推薦
(2):多文件的多環(huán)境配置
多文件配置多環(huán)境 推薦
(3):profile激活方式
在上面我介紹了使用配置文件來指定配置環(huán)境:spring.profiles.active=xx;可是這個是有局限性的,除了這種方式激活還要另外2種
配置文件:? 再配置文件中配置:spring.profiles.active=dev
虛擬機參數(shù):在VM options 指定:-Dspring.profiles.active=dev
命令行參數(shù):java –jar xxx.jar --spring.profiles.active=dev
優(yōu)先級:命令行參數(shù) > 虛擬機參數(shù) > 配置文件
2:松散綁定
不論配置文件中的屬性值是短橫線、駝峰式還是下?lián)Q線分隔配置方式,在注入配置時都可以通過短橫線方式取出值;使用范圍:properties文件、YAML文件、系統(tǒng)屬性
松散綁定配置文件介紹
3:配置路徑及其加載順序
4:外部配置加載順序? 官方文檔
外部加載順序就是說在程序運行時加載外部的配置信息的順序,如我們常用的命令行下指定額外信息 java -jar? xxx.jar --server.port=8888
中文介紹
5:修改配置文件位置及默認名稱
我們知道配置文件只能以application.yml/properties來定義,但是名稱不一樣是可以指定具體文件名,也可以把配置文件放入其它位置并指定都是可以的;指定的方式我以cmd下指定參數(shù) java -jar xxx.jar? --xxx? -xxx 方式指定,或在IDEA里面指定-xxx參數(shù)
# 自定義配置文件名稱
--spring.config.name=myApplication
# 指定配置文件存儲位置 或 指定配置文件存儲位置及配置文件名稱
--spring.config.location=classpath:/myconfig/myApplication.yml
注:多個配置參數(shù)以空格隔開 --xxx -xxx
九:SpringBoot監(jiān)聽器
我們知道JavaEE包括13門規(guī)范,其中Servlet規(guī)范包括三個技術(shù)點:Servlet、Listener、Filter;而本章介紹的是監(jiān)聽器,監(jiān)聽器就是監(jiān)聽某個對象的狀態(tài)變化;SpringBoot中的監(jiān)聽器有很多種:如下
①:CommandLineRunner 應(yīng)用程序啟動完成后
②:ApplicationRunner 應(yīng)用程序啟動完成后
③:ApplicationContextInitializer 程序運行初始化前
④:SpringApplicationRunListener 多功能監(jiān)聽器
1:對開發(fā)者有益的監(jiān)聽器
CommandLineRunner 監(jiān)聽器使用
ApplicationRunner 監(jiān)聽器使用
2:對框架開發(fā)者有意義的監(jiān)聽器 功能多
ApplicationContextInitializer 監(jiān)聽器使用
SpringApplicationRunListener 監(jiān)聽器使用
使用ApplicationContextInitializer/SpringApplicationRunListener監(jiān)聽器必看 配置一些信息才可使用
十:自動配置實現(xiàn)分析
我們在導入spring-boot-starter-web啟動器無需其它配置就可以之間用,還有我們導入spring-boot-starter-data-redis啟動器后可以直接使用@Autowired直接注入RedisTemplate對象,很奇怪吧,這就是SpringBoot自動配置特性,在下幾節(jié)我慢慢引入
1:@Import注解進階
當我們需要導入某個類到spring容器中去,但spring恰好無法掃描到這個類,而我們又無法修改這個類(jar包形式)。我們就可以通過@import(xxx.class)是將這個類導入到spring容器中
(1):直接導入
復制代碼
//配置類? springConfig
@Configuration
@Import(value={DateConfig.class})? //直接導入
public class SpringConfig { }
//普通類,里面有個@Bean注入方法? DateConfig
//被任何一個配置類引用,當前自己類也變?yōu)樽优渲妙?/p>
public class DateConfig {
? ? //創(chuàng)建時間對象放入容器
? ? @Bean
? ? public Date createDate() { return new Date(); }
}
復制代碼
(2):通過配置類導入
復制代碼
@Configuration
public class SpringConfig {
? ? //創(chuàng)建時間對象放入容器
? ? @Bean
? ? public Date createDate() { return new Date(); }
}
@SpringBootApplication
@Import(value={SpringConfig.class}) //導入配置類
public class LintenerDemoApplication {
? ? public static void main(String[] args) {
? ? ? ? ConfigurableApplicationContext run = SpringApplication.run(LintenerDemoApplication.class, args);
? ? ? ? //打印時間對象
? ? ? ? System.out.println(run.getBean(Date.class));
? ? }
}
復制代碼
(3):通過ImportSelector接口實現(xiàn)類導入? 高級方式
使用ImportSelector接口
2:@Configuration注解進階
相對這個注解大家肯定不陌生,只要是Spring注解配置類都有這玩意;其實只要添加@Configuration注解的類里面可以衍生出各種條件注解供我們使用,前提只能在注解類下使用,它就是@Conditional條件注解,這個條件注解又衍生出各種詳細的條件注解
注:@EnableAutoConfiguration 其本質(zhì)是 @Import 和 @Configuration的組合
復制代碼
一:class類條件
? ? @ConditionalOnClass == 存在指定類條件
? ? @ConditionalOnMissingClass == 不存在指定類條件
二:屬性條件
? ? @ConditionalOnProperty == 屬性條件,還可以為屬性設(shè)置默認值
三:Bean條件
? ? @ConditionalOnBean == 存在Bean條件
? ? @ConditionalOnMissingBean == 不存在Bean條件
? ? @ConditionalOnSingleCondidate == 只有一個Bean條件
四:資源條件
? ? @ConditionalResource == 資源條件
五:Web應(yīng)用條件
? ? @ConditionalOnWebApplication == web應(yīng)用程序條件
? ? @ConditionalOnNotWebApplication == 不是web應(yīng)用程序條件
六:其他條件
? ? @ConditionalOneExpression == EL表達式條件
? ? @ConditionalOnJava == 在特定的Java版本條件
復制代碼
@Configuration還有一些加載順序的方式
1:@AutoConfigureBefore==在那些自動配置之前執(zhí)行
2:@AutoConfigureAfter==在那些自動配置之后執(zhí)行
3:@AutoConfigureOrder==自動配置順序
(1):@ConditionalOnClass? 與 @ConditionalOnProperty 介紹
復制代碼
@ConditionalOnClass注解屬性介紹
? ? Class<?>[] value():以類的class形式的數(shù)組
? ? String[] name():以類的全路徑名的字符串數(shù)組
@ConditionalOnProperty注解屬性介紹
? ? value 和 name:數(shù)組,獲取對應(yīng)property名稱的值,它們只能存在其中一個
? ? prefix:配置屬性名稱的前綴,比如spring.http.encoding
? ? havingValue:可與name組合使用,比較獲取到的屬性值與havingValue給定的值是否相同,相同才加載配置
? ? matchIfMissing:缺少該配置屬性時是否可以加載。如果為true,沒有該配置屬性時也會正常加載;反之則不會生效
復制代碼
案例講解注解
RedisTemplate自動注入分析
USB Microphone https://www.soft-voice.com/
Wooden Speakers? https://www.zeshuiplatform.com/
亞馬遜測評 www.yisuping.cn
深圳網(wǎng)站建設(shè)www.sz886.com