一、SpringBoot常用注解
二、SpringBoot自動配置機制
SpringBoot版本:1.5.13.RELEASE
對應官方文檔鏈接:https://docs.spring.io/spring-boot/docs/1.5.13.RELEASE/reference/htmlsingle/
上一篇:SpringBoot 入門篇(一) Hello World
一、SpringBoot常用注解
??在上一篇文章中引用了官方文檔的入門例子,這個例子中只是告訴我們如何去快速上手SpringBoot,我們實際開發中,肯定不會在一個類中把所有業務處理包圓,通常會劃分出Controller層、Service層、Dao層等。SpringBoot官方文檔給出了如何去規劃我們的代碼,并且如何正確使用它們。
??官方文檔給出了一個常用的代碼層次劃分結構圖
??官方文檔推薦將包含main方法的類放到項目的根包下,并且使用@SpringBootApplication注解進行標注,該注解會將當前類所在路徑作為基準目錄,掃描基準目錄下所有類(包含子目錄中的類)。
??@SpringBootApplication是SpringBoot提供的一個常用注解,它包含了另外3個很常用的注解,分別是@EnableAutoConfiguration,@ComponentScan和@Configuration。
@SpringBootApplication // 等價于 @Configuration + @EnableAutoConfiguration + @ComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
(1)@EnableAutoConfiguration是SpringBoot提供的一個注解,它的作用是啟動SpringBoot的自動配置機制;
(2)@ComponentScan是Spring框架提供的一個注解,它能掃描項目中所有的組件(@Component, @Service, @Repository, @Controller等進行標注的類)并將其注冊到Spring容器;
(3)@Configuration是Spring框架提供的一個注解,它能替代傳統的xml配置文件,將Spring框架中的xml文件以Java類的形式替代,去XML是SpringBoot的一個重要思想。
??在項目中我們可以將類同時標注@EnableAutoConfiguration、@ComponentScan和@Configuration,所起的作用和@SpringBootApplication是相同的,但需要注意的是,@EnableAutoConfiguration、@ComponentScan和@Configuration這3個注解并非是捆綁銷售,我們可以將他們任意組合。官方文檔中給出了如下的一個例子
@Configuration
@EnableAutoConfiguration
@Import({ MyConfig.class, MyAnotherConfig.class })
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
可以看到,代碼中并沒有使用@ComponentScan注解,而是使用@Import注解來導入組件并將其聲明成一個bean。當然,如果我們對XML文件念念不忘,我們可以使用@ImportResource注解來導入XML文件,@Import和@ImportResource都是Spring框架提供的注解。
@Configuration
@EnableAutoConfiguration
@ImportResource(locations={"classpath:applicationContext.xml"})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
二、SpringBoot自動配置機制
??SpringBoot總是嘗試根據我們的jar依賴,來為我們的項目進行一些自動配置以減輕開發者環境搭建的負擔,例如我們項目中依賴了spring-boot-starter-web,SpringBoot則會自動為我們進行web環境的配置(如添加內置Tomcat、配置SpringMVC等)。
??SpringBoot自動配置的幕前黑手就是上一節中提到的@EnableAutoConfiguration注解。SpringBoot自動配置是非入侵的,我們可以開啟我們自己的配置來替代自動配置,例如如果我們添加了自己的數據源配置,則SpringBoot默認內置的數據庫服務則不會起作用。
??我們可以在啟動時加入 --debug 參數來查看當前有那些自動配置,命令行直接執行java -jar ***.jar --debug即可。如果想在IDEA中查看,則首先進行如下配置
執行main方法即可看到當前有那些自動配置
如果我們不需要某些自動配置,可以通過@EnableAutoConfiguration注解的exclude或者excludeName屬性來指定不需要的自動配置,需要注意的是,當不需要的進行自動配置的類不在classpath下時,此時只能通過excludeName屬性指定類的全路徑名來排除不需要的自動配置。當然,還有一種辦法是在SpringBoot配置文件中指定spring.autoconfigure.exclude,SpringBoot配置文件一般是指classpath下默認的application.properties或者application.yml或者application.yaml,在這里不做說明,后續的文章會進行詳細介紹。
@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
上一篇:SpringBoot 入門篇(一) Hello World
下一篇:SpringBoot 入門篇(三) SpringApplication