應用程序主類說明
??一般在書寫SpringBoot項目的時候通常建議將應用程序主類放到其他類之上的根包中。@EnbaleAutoConfiguration注解通常放置在主類上,它隱式的定義了某些基本搜索包。 例如,如果您正在編寫JPA應用程序,則@EnableAutoConfiguration注解類的包將用于搜索@Entity項。
使用根包(root package)還可以使用@ComponentScan注釋,而不需要指定basePackage屬性(因為默認會掃描主類下所有的包)。 如果您的主類在根包中,也可以使用@SpringBootApplication注釋。
如下圖所示:Application就是應用程序主類

Application.java文件將聲明main方法以及基本的@Configuration。
package com.yubin.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* SpringBoot 主應用程序類
*
* @Author YUBIN
* @create 2019-06-09
*/
@ComponentScan // 開啟包掃描
@EnableAutoConfiguration // 開啟自動配置
@Configuration // 申明當前類為配置類
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
到這里也許你會詢問,難道我的每一個應用程序都需要在應用程序主類上加上@EnableAutoConfiguration、@CompontScan、@Configuration這3個注解么,答案是否定的,SpringBoot提供了一個方便的@SpringBootApplication注解作為這個三個的替代方法。
@SpringBootApplication // 相當于 @ComponentScan,@EnableAutoConfiguration,@Configuration這三個注解
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@SpringBootApplication還提供了別名來定制@EnableAutoConfiguration和@ComponentScan的屬性
配置類
??Spring Boot支持基于Java的配置。雖然可以使用XML配置用SpringApplication.run(),但我們通常建議您的主source是@Configuration類。 通常,定義main方法的類也是作為主要的@Configuration一個很好的選擇。
(1)、導入其他配置類
??在實際項目中可能不會把所有的配置都放在一個配置類(用@Configuration注解的類)中,可能會分開配置。這時可以用@Import注解引用(@Import(value = {***.class}))。@Import注解可用于導入其他配置類。 或者,您可以使用@ComponentScan自動掃描所有Spring組件,包括@Configuration類。
(2)、導入xml配置
??如果在你的項目中需要用到xml配置文件,或者你還不習慣java配置的方式,那么你可以通過在入口啟動類上加上@ImportResource(value = { "路徑" })或者使用@ImportResource(locations= { "路徑" }),一樣的效果,多個XML文件的話你可以用逗號“,”分隔,就這樣輕而易舉的引用XML配置。
(3)、自動配置
??Spring Boot 會根據(jù)您添加的jar依賴關系自動配置您的Spring應用程序。例如,如果HSQLDB在您的類路徑上,并且您沒有手動配置任何數(shù)據(jù)庫連接bean,那么我們將自動配置內存數(shù)據(jù)庫。
您需要通過將@EnableAutoConfiguration或@SpringBootApplication注解添加到您的一個@Configuration類中來選擇自動配置。
備注:你應該只添加一個@EnableAutoConfiguration注解。 我們通常建議您將其添加到主@Configuration類中。
(4)、替代自動配置
??SpringBoot自動配置是非侵入式的,您可以隨時定義自己的配置來替換自動配置。 例如,如果您添加自己的 DataSource bean,則默認的嵌入式數(shù)據(jù)庫支持將會退回。(這是由于在原來的配置類注解了如@ConditianalOnMissingBean;當程序中存在你需要替代的自動配置類時,這個配置類將覆蓋SpringBoot的自動配置)
如果您需要了解當前有哪些自動配置,以及為什么,請使用--debug開關啟動應用程序。 這將啟用debug日志,并將自動配置日志記錄到控制臺。
(5)、禁用指定的自動配置
??如果你發(fā)現(xiàn)正在使用一些不需要的自動配置類,可以使用@EnableAutoConfiguration屬性來禁用它們。
@ComponentScan // 開啟包掃描
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class}) // 開啟自動配置
@Configuration // 申明當前類為配置類
//@Import(value = {MyProperties.class})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
如果類不在classpath路徑上,則可以使用注釋的excludeName屬性,并指定全限定名(fully qualified name)。 最后,您還可以通過spring.autoconfigure.exclude屬性控制要排除的自動配置類列表。
備注:注解和使用屬性(property)定義都可以指定要排除的自動配置類。