版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
J
a
v
a
E
E框架整合開發(fā)創(chuàng)新·協(xié)作·分享T
I
P
C
C教案第六章Spring
Boot核心T
I
P
C
C教案本章目標(biāo)理解Spring
Boot的自動(dòng)配置原理了解Spring
Boot的條件注解掌握Spring
Boot的核心注解掌握Spring
Boot的基本配置T
I
P
C
C教案本章內(nèi)容Spring
Boot的基本配置讀取應(yīng)用配置日志配置Spring
Boot的自動(dòng)配置原理Spring
Boot的條件注解T
I
P
C
C教案6.1
Spring
Boot的基本配置6.1.1啟動(dòng)類和核心注解@SpringBootApplication6.1.2關(guān)閉某個(gè)特定的自動(dòng)配置6.1.3定制Banner6.1.4關(guān)閉banner6.1.5
Spring
Boot的全局配置文件6.1.6
Spring
Boot的StartersT
I
P
C
C教案6.1.1啟動(dòng)類和核心注解@SpringBootApplicationSpring
Boot應(yīng)用通常都有一個(gè)名為*Application的程序入口類,該入口類需要使用Spring
Boot的核心注解
@SpringBootApplication標(biāo)注為應(yīng)用的啟動(dòng)類。Spring
Boot的核心注解@SpringBootApplication是一個(gè)組合注解,主要組合了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan注解。源代碼可以從spring-boot-autoconfigure-2.4.1.jar依賴包中查看
org/springframework/boot/autoconfigure/SpringBootApplication.java。T
I
P
C
C教案1.@SpringBootConfiguration注解@SpringBootConfiguration是Spring
Boot應(yīng)用的配置注解,該注解也是一個(gè)組合注解,源代碼可以從spring-boot-2.4.1.jar依賴包中查看
org/springframework/boot/SpringBootConfiguration.java。
在Spring
Boot應(yīng)用中推薦使用@SpringBootConfiguration注解替代@Configuration注解。T
I
P
C
C教案2.@EnableAutoConfiguration注解@EnableAutoConfiguration注解可以讓Spring
Boot根據(jù)當(dāng)前應(yīng)用項(xiàng)目所依賴的jar自動(dòng)配置項(xiàng)目的相關(guān)配置。例如,在Spring
Boot項(xiàng)目的pom.xml文件中添加了spring-boot-starter-web依賴,Spring
Boot項(xiàng)目會(huì)自動(dòng)添加Tomcat和Spring
MVC的依賴,同時(shí)對(duì)Tomcat和Spring
MVC進(jìn)行自動(dòng)配置。T
I
P
C
C教案3.@ComponentScan注解該注解的功能是讓Spring
Boot自動(dòng)掃描
@SpringBootApplication所在類的同級(jí)包以及它的子包中的配置,所以建議將@SpringBootApplication注解的入口類放置在項(xiàng)目包下(Group
Id+Artifact
Id組合的包名),這樣可以保證
Spring
Boot自動(dòng)掃描項(xiàng)目所有包中的配置。這樣就不需要在配置文件中配置包的掃描。T
I
P
C
C教案6.1
Spring
Boot的基本配置6.1.1啟動(dòng)類和核心注解@SpringBootApplication6.1.2關(guān)閉某個(gè)特定的自動(dòng)配置6.1.3定制Banner6.1.4關(guān)閉banner6.1.5
Spring
Boot的全局配置文件6.1.6
Spring
Boot的StartersT
I
P
C
C教案6.1.2關(guān)閉某個(gè)特定的自動(dòng)配置使用@EnableAutoConfiguration注解可以讓Spring
Boot根據(jù)當(dāng)前應(yīng)用項(xiàng)目所依賴的jar自動(dòng)配置項(xiàng)目的相關(guān)配置。如果開發(fā)者不需要Spring
Boot的某一項(xiàng)自動(dòng)配置,該如何實(shí)現(xiàn)呢?通過查看@SpringBootApplication的源代碼可知,應(yīng)該使用
@SpringBootApplication注解的exclude參數(shù)關(guān)閉特定的自動(dòng)配置,以關(guān)閉neo4j自動(dòng)配置為例,代碼如下:@SpringBootApplication(exclude={Neo4jDataAutoConfiguration.class})T
I
P
C
C教案6.1
Spring
Boot的基本配置6.1.1啟動(dòng)類和核心注解@SpringBootApplication6.1.2關(guān)閉某個(gè)特定的自動(dòng)配置6.1.3定制Banner6.1.4關(guān)閉banner6.1.5
Spring
Boot的全局配置文件6.1.6
Spring
Boot的StartersT
I
P
C
C教案6.1.3定制Banner首先,在src/main/resources目錄下新建banner.txt文件,并在文件中添加任意字符串內(nèi)容,如“#Hello,Spring
Boot!”。然后,重新啟動(dòng)Spring
Boot項(xiàng)目,將發(fā)現(xiàn)控制臺(tái)啟動(dòng)信息已經(jīng)發(fā)生改變。如果開發(fā)者想把啟動(dòng)字符串信息換成字符串圖案,具體操作:首先,打開網(wǎng)站/software/taag,輸入自定義字符串,單擊網(wǎng)頁下方的“Select
&
Copy”按鈕。然后,將自
定義banner字符串圖案復(fù)制到src/main/resources目錄下的
banner.txt文件中,重新啟動(dòng)Spring
Boot項(xiàng)目即可。T
I
P
C
C教案6.1
Spring
Boot的基本配置6.1.1啟動(dòng)類和核心注解@SpringBootApplication6.1.2關(guān)閉某個(gè)特定的自動(dòng)配置6.1.3定制Banner6.1.4關(guān)閉banner6.1.5
Spring
Boot的全局配置文件6.1.6
Spring
Boot的StartersT
I
P
C
C教案6.1.4關(guān)閉banner開發(fā)者如果需要關(guān)閉banner,可以在src/main/resources目錄下的perties文件中添加如下配置:spring.main.banner-mode
=
offT
I
P
C
C教案6.1
Spring
Boot的基本配置6.1.1啟動(dòng)類和核心注解@SpringBootApplication6.1.2關(guān)閉某個(gè)特定的自動(dòng)配置6.1.3定制Banner6.1.4關(guān)閉banner6.1.5
Spring
Boot的全局配置文件6.1.6
Spring
Boot的StartersT
I
P
C
C教案6.1.5
Spring
Boot的全局配置文件Spring
Boot的全局配置文件(perties或application.yml)位于Spring
Boot應(yīng)用的
src/main/resources目錄下。1.設(shè)置端口號(hào)server.port=88882.設(shè)置Web應(yīng)用的上下文路徑server.servlet.context-path=/XXX這時(shí)應(yīng)該通過“http://localhost:8080/XXX/testStarters”訪問如下控制器類中的請(qǐng)求處理方法:@RequestMapping("/testStarters")public
String
index()
{}?。?!在Spring
Boot的全局配置文件中,可以配置與修改多個(gè)參數(shù),讀者想了解參數(shù)的詳細(xì)說明和描述可以查看官方文檔說明:https://docs.spring.io/spring-boot/docs/2.4.1/reference/htmlsingle/#common-application-properties。T
I
P
C
C教案6.1
Spring
Boot的基本配置6.1.1啟動(dòng)類和核心注解@SpringBootApplication6.1.2關(guān)閉某個(gè)特定的自動(dòng)配置6.1.3定制Banner6.1.4關(guān)閉banner6.1.5
Spring
Boot的全局配置文件6.1.6
Spring
Boot的StartersT
I
P
C
C教案6.1.6
Spring
Boot的StartersSpring
Boot提供了很多簡化企業(yè)級(jí)開發(fā)的“開箱即用”的
Starters。Spring
Boot項(xiàng)目只要使用了所需要的Starters,Spring
Boot即可自動(dòng)關(guān)聯(lián)項(xiàng)目開發(fā)所需要的相關(guān)依賴。例如,我們?cè)赾h6_1的pom.xml文件中,添加如下依賴配置:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>Spring
Boot將自動(dòng)關(guān)聯(lián)Web開發(fā)的相關(guān)依賴,如tomcat、spring-webmvc等,進(jìn)而對(duì)Web開發(fā)的支持,并將相關(guān)技術(shù)的配置實(shí)現(xiàn)自動(dòng)配置。通過訪問“https://docs.spring.io/spring-boot/docs/2.4.1/reference/htmlsingle/#using-boot-starter”官網(wǎng),可以查看Spring
Boot官方提供的StartersT
I
P
C
C教案本章內(nèi)容Spring
Boot的基本配置讀取應(yīng)用配置日志配置Spring
Boot的自動(dòng)配置原理Spring
Boot的條件注解T
I
P
C
C教案6.2讀取應(yīng)用配置6.2.1
Environment6.2.2
@Value6.2.3
@ConfigurationProperties6.2.4
@PropertySourceT
I
P
C
C教案6.2.1
EnvironmentEnvironment是一個(gè)通用的讀取應(yīng)用程序運(yùn)行時(shí)的環(huán)境變量的類,可以通過key-value方式讀取perties、命令行輸入?yún)?shù)、系統(tǒng)屬性、操作系統(tǒng)環(huán)境變量等。
【例6-1】使用Environment類讀取perties配置文件的內(nèi)容。1.創(chuàng)建Spring
Boot項(xiàng)目ch6_1使用STS快速創(chuàng)建Spring
Web應(yīng)用ch6_1。2.添加配置文件內(nèi)容
在src/main/resources目錄下,找到全局配置文件
perties,并添加如下內(nèi)容:test.msg=read
configT
I
P
C
C教案6.2.1
Environment3.創(chuàng)建控制器類EnvReaderConfigController在src/main/java目錄下,創(chuàng)建名為com.ch6_1.controller的包(是com.ch6_1包(主類所在的包)的子包,保障注解全部被掃描),并在該包下創(chuàng)建控制器類EnvReaderConfigController。在控制器類EnvReaderConfigController中,使用@Autowired注解依賴注入Environment類的對(duì)象。@RestControllerpublic
class
EnvReaderConfigController{@Autowiredprivate
Environment
env;@RequestMapping("/testEnv")public
String
testEnv()
{return"方法一:"+env.getProperty("test.msg");//test.msg為配置文件perties中的key}}T
I
P
C
C教案6.2.1
Environment4.啟動(dòng)Spring
Boot應(yīng)用運(yùn)行Ch61Application類的main方法,啟動(dòng)Spring
Boot應(yīng)用。5.測(cè)試應(yīng)用啟動(dòng)Spring
Boot應(yīng)用后,默認(rèn)訪問地址為:
http://localhost:8080/,將項(xiàng)目路徑直接設(shè)為根路徑,這是
Spring
Boot的默認(rèn)設(shè)置。因此,我們可以通過
http://localhost:8080/testEnv測(cè)試應(yīng)用(testEnv與控制器類
ReaderConfigController中的@RequestMapping("/testEnv")對(duì)應(yīng))。T
I
P
C
C教案6.2讀取應(yīng)用配置6.2.1
Environment6.2.2
@Value6.2.3
@ConfigurationProperties6.2.4
@PropertySourceT
I
P
C
C教案6.2.2
@Value使用@Value注解讀取配置文件內(nèi)容示例代碼如下:@Value("${test.msg}")//test.msg為配置文件perties中的keyprivate
String
msg;//通過@Value注解將配置文件中key對(duì)應(yīng)的value賦值給變量msg@RestControllerpublic
class
ValueReaderConfigController
{@Value("${test.msg}")private
String
msg;@RequestMapping("/testValue")public
String
testValue()
{return"方法二:"+msg;}}http://localhost:8080/testValue測(cè)試應(yīng)用T
I
P
C
C教案6.2讀取應(yīng)用配置6.2.1
Environment6.2.2
@Value6.2.3
@ConfigurationProperties6.2.4
@PropertySourceT
I
P
C
C教案6.2.3
@ConfigurationProperties使用@ConfigurationProperties首先建立配置文件與對(duì)象的映
射關(guān)系,然后在控制器方法中使用@Autowired注解將對(duì)象注入?!纠?-3】使用@ConfigurationProperties讀取配置文件內(nèi)容。#
nest
Simple
propertiesobj.sname=chenhengobj.sage=88#List
propertiesobj.hobby[0]=runningobj.hobby[1]=basketball#Map
Propertiesobj.city.cid=dlame=dalianT
I
P
C
C教案建立配置文件與對(duì)象的映射關(guān)系@Component//使用Component注解,聲明一個(gè)組件,被控制器依賴注入@ConfigurationProperties(prefix="obj")//obj為配置文件中key的前綴public
class
StudentProperties{private
String
sname;private
int
sage;private
List<String>
hobby;private
Map<String,
String>
city;//省略set和get方法@Overridepublic
String
toString()
{return
"StudentProperties
[sname="
+
sname+
",
sage="
+
sage+
",
hobby0="
+
hobby.get(0)+
",
hobby1="
+
hobby.get(1)+
",
city="
+
city
+
"]";}}T
I
P
C
C教案創(chuàng)建控制器類ConfigurationPropertiesController@RestControllerpublic
class
ConfigurationPropertiesController
{@AutowiredStudentProperties
studentProperties;@RequestMapping("/testConfigurationProperties")public
String
testConfigurationProperties()
{return
studentProperties.toString();}}通過http://localhost:8080/testConfigurationProperties測(cè)試應(yīng)用T
I
P
C
C教案6.2讀取應(yīng)用配置6.2.1
Environment6.2.2
@Value6.2.3
@ConfigurationProperties6.2.4
@PropertySourceT
I
P
C
C教案6.2.4
@PropertySource可以使用@PropertySource注解找到項(xiàng)目的其他配置文件,然后結(jié)合6.2.1~6.2.3節(jié)中任意一種方式讀取即可?!纠?-4】使用@PropertySource+@Value讀取其他配置文件內(nèi)容。在ch6_1的src/main/resources目錄下創(chuàng)建配置文件
perties和perties,并在perties文件中添加如下內(nèi)容:your.msg=hello.在perties文件中添加如下內(nèi)容:my.msg=test
PropertySourceT
I
P
C
C教案創(chuàng)建控制器類PropertySourceValueReaderOhterController在ch6_1項(xiàng)目的com.ch6_1.controller包中,創(chuàng)建名為
PropertySourceValueReaderOhterController的控制器類。在該控制器類中,首先使用@PropertySource注解找到其它配置文件,然后使用@Value注解讀取配置文件內(nèi)容@RestController@PropertySource({"perties","perties"})public
class
PropertySourceValueReaderOhterController
{@Value("${my.msg}")private
String
mymsg;@Value("${your.msg}")private
String
yourmsg;@RequestMapping("/testProperty")public
String
testProperty()
{return"其他配置文件perties:"+mymsg+"<br>"+"其他配置文件perties:"+yourmsg;}}通過
http://localhost:8080/testProperty測(cè)試應(yīng)用T
I
P
C
C教案本章內(nèi)容Spring
Boot的基本配置讀取應(yīng)用配置日志配置Spring
Boot的自動(dòng)配置原理Spring
Boot的條件注解T
I
P
C
C教案6.3日志配置默認(rèn)情況下,Spring
Boot應(yīng)用使用LogBack實(shí)現(xiàn)日志,使用
apache
Commons
Logging作為日志接口,因此代碼中通常如下所示使用日志:@RestControllerpublic
class
LogTestController
{private
Log
log
=
LogFactory.getLog(LogTestController.class);@RequestMapping("/testLog")public
String
testLog()
{("測(cè)試日志");return"測(cè)試日志";}}T
I
P
C
C教案日志級(jí)別日志級(jí)別有ERROR、WARN、INFO、DEBUG和TRACE。Spring
Boot默認(rèn)的日志級(jí)別為INFO,日志信息可以打印到控制臺(tái)。但開發(fā)者可以自己設(shè)定Spring
Boot項(xiàng)目的日志輸出級(jí)別,例如在perties配置文件中加入以下配置:#設(shè)定日志的默認(rèn)級(jí)別為infologging.level.root=info#設(shè)定org包下的日志級(jí)別為warn=warn#設(shè)定com.ch.ch4_1包下的日志級(jí)別為debug.ch.ch4_1=debugT
I
P
C
C教案輸出日志到文件Spring
Boot項(xiàng)目默認(rèn)并沒有輸出日志到文件,但開發(fā)者可以在
perties配置文件中指定日志輸出到文件,配置示例如下:logging.file=my.log該日志文件位于Spring
Boot項(xiàng)目運(yùn)行的當(dāng)前目錄(項(xiàng)目工程目錄下)。將在c:/log目錄下生成一個(gè)名為my.log的日志文件。logging.file=c:/log/my.log不管日志文件位于何處,當(dāng)日志文件大小到達(dá)10MB時(shí),將自動(dòng)生成一個(gè)新日志文件。T
I
P
C
C教案日志格式控制logging.pattern.console=%level
%date{yyyy-MM-dd
HH:mm:ss:SSS}
%logger{50}.%M
%L
:%m%nlogging.pattern.file=%level
%date{ISO8601}
%logger{50}.%M
%L
:%m%n文件日志輸出格式
控制臺(tái)日志輸出格式logging.pattern.console:指定控制臺(tái)日志格式。logging.pattern.file:指定日志文件格式。%level:指定輸出日志級(jí)別。%date:指定日志發(fā)生的時(shí)間。ISO8601表示標(biāo)準(zhǔn)日期,相當(dāng)于yyyy-MM-dd
HH:mm:ss:SSS。%logger:指定輸出Looger的名字,包名+類名,{n}限定了輸出長度。%M:指定日志發(fā)生時(shí)的方法名。%L:指定日志調(diào)用時(shí)所在代碼行,適用于開發(fā)調(diào)試,線上運(yùn)行時(shí)不建議使用此參數(shù),因?yàn)楂@取代碼行對(duì)性能有消耗。%m:表示日志消息。%n:表示日志換行。T
I
P
C
C教案本章內(nèi)容Spring
Boot的基本配置讀取應(yīng)用配置日志配置Spring
Boot的自動(dòng)配置原理Spring
Boot的條件注解T
I
P
C
C教案6.4
Spring
Boot的自動(dòng)配置原理從6.1.1節(jié),我們可知Spring
Boot使用核心注解
@SpringBootApplication將一個(gè)帶有main方法的類標(biāo)注為應(yīng)
用的啟動(dòng)類。@SpringBootApplication注解最主要的功能之一是為Spring
Boot開啟了一個(gè)@EnableAutoConfiguration注解的自動(dòng)配置功能。@EnableAutoConfiguration注解主要利用了一個(gè)類名為
AutoConfigurationImportSelector的選擇器向Spring容器自動(dòng)配置一些組件。@EnableAutoConfiguration注解的源代碼可以從spring-boot-autoconfigure-2.4.1.jar(org.springframework.boot.autoconfigure)依賴包中查看。T
I
P
C
C教案6.4
Spring
Boot的自動(dòng)配置原理從源代碼中可以看出,最終Spring
Boot是通過加載所有(inmultiple
JAR
files)META-INF/spring.factories配置文件進(jìn)行自動(dòng)配置的。所以,@SpringBootApplication注解通過使用
@EnableAutoConfiguration注解自動(dòng)配置的原理是:從classpath中搜索所有META-INF/spring.factories配置文件,并將其中
org.springframework.boot.autoconfigure.EnableAutoConfiguration對(duì)應(yīng)的配置項(xiàng)通過Java反射機(jī)制進(jìn)行實(shí)例化,然后匯總并加載到Spring的IoC容器。T
I
P
C
C教案本章內(nèi)容Spring
Boot的基本配置讀取應(yīng)用配置日志配置Spring
Boot的自動(dòng)配置原理Spring
Boot的條件注解T
I
P
C
C教案6.5
Spring
Boot的條件注解6.5.1條件注解6.5.2實(shí)例分析6.5.3自定義條件6.5.4自定義StartersT
I
P
C
C教案6.5.1條件注解打開spring.factories配置文件中任意一個(gè)AutoConfiguration,一般都可以找到條件注解。所謂Spring的條件注解,就是應(yīng)用程序的配置類在滿足某些特定條件才會(huì)被自動(dòng)啟用此配置類的配置項(xiàng)。Spring
Boot的條件注解位于spring-boot-autoconfigure-2.4.1.jar的org.springframework.boot.autoconfigure.condition包下。條件注解都是組合了@Conditional元注解,只是針對(duì)不同的條件去實(shí)現(xiàn)。T
I
P
C
C教案6.5
Spring
Boot的條件注解6.5.1條件注解6.5.2實(shí)例分析6.5.3自定義條件6.5.4自定義StartersT
I
P
C
C教案6.5.2實(shí)例分析從Spring
MVC項(xiàng)目的web.xml文件中過濾器的配置可知,
Spring
Boot自動(dòng)配置HTTP編碼需要滿足的條件是:配置
CharacterEncodingFilter的Bean,并設(shè)置encoding和forceEncoding這兩個(gè)參數(shù)。通過查看源代碼可知
org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration類,根據(jù)條件注解配置了
CharacterEncodingFilter的Bean,并設(shè)置了encoding和forceEncoding這兩個(gè)參數(shù)。T
I
P
C
C教案6.5
Spring
Boot的條件注解6.5.1條件注解6.5.2實(shí)例分析6.5.3自定義條件6.5.4自定義StartersT
I
P
C
C教案6.5.3自定義條件Spring的@Conditional注解根據(jù)滿足某特定條件創(chuàng)建一個(gè)特定
的Bean。例如,當(dāng)某jar包在類路徑下時(shí),自動(dòng)配置一個(gè)或多個(gè)
Bean。即根據(jù)特定條件控制Bean的創(chuàng)建行為,這樣我們就可以
利用此特性進(jìn)行一些自動(dòng)配置。那么,開發(fā)者如何自己構(gòu)造條件呢?在Spring框架中,可以通過實(shí)現(xiàn)Condition接口,并重寫
matches方法來構(gòu)造條件?!纠?-7】如果類路徑classpath(src/main/resources)下存在文件perties,則輸出“perties文件存在?!?;否則輸出“perties文件不存在!”。T
I
P
C
C教案構(gòu)造條件public
class
MyCondition
implements
Condition{@Overridepublic
boolean
matches(ConditionContext
context,
AnnotatedTypeMetadata
metadata)
{return
context.getResourceLoader().getResource("classpath:perties").exists();}}public
class
YourCondition
implements
Condition{@Overridepublic
boolean
matches(ConditionContext
context,
AnnotatedTypeMetadata
metadata)
{return
!context.getResourceLoader().getResource("classpath:perties").exists()}}T
I
P
C
C教案創(chuàng)建不同條件下Bean的類package
com.ch6_1.conditional;public
interface
MessagePrint
{public
String
showMessage();}package
com.ch6_1.conditional;public
class
MyMessagePrint
implements
MessagePrint{@Overridepublic
String
showMessage()
{return
"perties文件存在。";}}package
com.ch6_1.conditional;public
class
YourMessagePrint
implements
MessagePrint{@Overridepublic
String
showMessage()
{return
"perties文件不存在!";}}T
I
P
C
C教案創(chuàng)建配置類@Configurationpublic
class
ConditionConfig
{@Bean@Conditional(MyCondition.class)public
MessagePrint
myMessage()
{return
new
MyMessagePrint();}@Bean@Conditional(YourCondition.class)public
MessagePrint
yourMessage()
{return
new
YourMessagePrint();}}使用@Bean和@Conditional實(shí)例化符合條件的BeanT
I
P
C
C教案創(chuàng)建測(cè)試類package
com.ch6_1.conditional;import
org.springframework.context.annotation.AnnotationConfigApplicationContext;public
class
TestMain
{private
static
AnnotationConfigApplicationContext
context;public
static
void
main(String[]
args)
{context
=
new
AnnotationConfigApplicationContext(ConditionConfig.class);MessagePrint
mp
=
context.getBean(MessagePrint.class);System.out.println(mp.showMessage());}}T
I
P
C
C教案運(yùn)行當(dāng)Spring
Boot應(yīng)用ch6_1的src/main/resources目錄下存在
perties文件時(shí),運(yùn)行測(cè)試類,控制臺(tái)顯示
“perties文件存在。”;當(dāng)Spring
Boot應(yīng)用ch6_1的src/main/resources目錄下不存在perties文件時(shí),運(yùn)行測(cè)試類,控制臺(tái)顯示“perties文件不存在!”。T
I
P
C
C教案6.5
Spring
Boot的條件注解6.5.1條件注解6.5.2實(shí)例分析6.5.3自定義條件6.5.4自定義StartersT
I
P
C
C教案6.5.4自定義Starters從6.1.6節(jié)可知,第三方為Spring
Boot貢獻(xiàn)了許多Starters。那么,我們作為開發(fā)者是否也可以貢獻(xiàn)自己的Starters?學(xué)習(xí)
Spring
Boot的自動(dòng)配置機(jī)制后,答案是肯定的?!纠?-8】自定義一個(gè)Starter(spring_boot_mystarters)。要求:當(dāng)類路徑中存在MyService類時(shí),自動(dòng)配置該類的Bean,并可以將相應(yīng)Bean的屬性在perties中配置。T
I
P
C
C教案新建Spring
Boot項(xiàng)目spring_boot_mystarters首先,通過選擇菜單“File->New->Spring
Starter
Project”打開“New
Spring
Starter
Project”對(duì)話框。其次,在對(duì)話框中輸入項(xiàng)目名稱spring_boot_mystarters。最后,單擊“Next”與“Finish”按鈕。T
I
P
C
C教案修改pom文件修改Spring
Boot項(xiàng)目spring_boot_mystarters的pom文件,增加Spring
Boot自身的自動(dòng)配置作為依賴。<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency>T
I
P
C
C教案創(chuàng)建屬性配置類MyPropertiespackage
com.ch.spring_boot_mystarters;import
perties.ConfigurationProperties;//在perties中通過my.msg=設(shè)置屬性@ConfigurationProperties(prefix="my")
public
class
MyProperties{private
String
msg="默認(rèn)值";public
String
getMsg()
{return
msg;}public
void
setMsg(String
msg)
{this.msg
=
msg;}}T
I
P
C
C教案創(chuàng)建判斷依據(jù)類MyService自定義的Starters將根據(jù)該類的存在與否來創(chuàng)建該類的Bean,該類可以是第三方類庫的類。package
com.ch.spring_boot_mystarters;public
class
MyService
{private
String
msg;public
String
sayMsg()
{return
"my
"
+
msg;}public
String
getMsg()
{return
msg;}public
void
setMsg(String
msg)
{this.msg
=
msg;}}T
I
P
C
C教案創(chuàng)建自動(dòng)配置類MyAutoConfiguration@Configuration//開啟屬性配置類MyProperties提供參數(shù)@EnableConfigurationProperties(MyProperties.class)//類加載器(類路徑)中是否存在對(duì)應(yīng)的類@ConditionalOnClass(MyService.class)//應(yīng)用環(huán)境中屬性是否存在指定的值@ConditionalOnProperty(prefix
=
"my",
value
=
"enabled",
matchIfMissing
=
true)public
class
MyAutoConfiguration
{@Autowiredprivate
MyProperties
myProperties;@Bean//當(dāng)容器中不存在MyService的Bean時(shí),自動(dòng)配置這個(gè)Bean@ConditionalOn
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2021高考英語四川岳池縣教研室統(tǒng)練(11)及答案-閱讀類
- 《創(chuàng)新服務(wù)方式》課件
- 2025年人教版八年級(jí)數(shù)學(xué)寒假預(yù)習(xí) 第07講 平行四邊形的性質(zhì)(3個(gè)知識(shí)點(diǎn)+4大考點(diǎn)舉一反三+過關(guān)測(cè)試)
- 2025年人教版七年級(jí)數(shù)學(xué)寒假復(fù)習(xí) 專題06 幾何圖形初步(3重點(diǎn)串講+17考點(diǎn)提升+過關(guān)檢測(cè))
- 【名師金典】2022新課標(biāo)高考生物總復(fù)習(xí)限時(shí)檢測(cè)9ATP與細(xì)胞呼吸-
- 【高考復(fù)習(xí)方案】2021屆高考語文一輪復(fù)習(xí)作業(yè)答案(新課標(biāo)-廣東省專用)
- 八年級(jí)歷史電子書
- 《醫(yī)學(xué)倫理討論會(huì)》課件
- 【狀元之路】2022高考地理總復(fù)習(xí)開卷速查18城市化-
- 【優(yōu)化探究】2022屆高三物理一輪復(fù)習(xí)知能檢測(cè):3-3牛頓運(yùn)動(dòng)定律的綜合應(yīng)用-
- 2023年中考語文二輪復(fù)習(xí):圖(表)文轉(zhuǎn)化之徽標(biāo)圖標(biāo) 練習(xí)題匯編(含答案解析)
- 2023年中考語文二輪復(fù)習(xí):名著閱讀 真題練習(xí)題匯編(含答案解析)
- 《汽車驅(qū)動(dòng)橋》汽車標(biāo)準(zhǔn)
- 磁異法探測(cè)海底纜線分解課件
- 投資的本質(zhì):巴菲特的12個(gè)投資宗旨
- 護(hù)欄和扶手制作與安裝工程檢驗(yàn)批質(zhì)量驗(yàn)收記錄
- 工裝夾具項(xiàng)目開發(fā)計(jì)劃書
- 食堂安全操作規(guī)范培訓(xùn)課件(48張)
- 中小學(xué)生研學(xué)旅行 投標(biāo)方案(技術(shù)方案)
- 乳頭混淆介紹演示培訓(xùn)課件
- 社區(qū)生鮮可行性報(bào)告
評(píng)論
0/150
提交評(píng)論