SpringBoot入門及深入

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容