Springboot自動配置
分析springboot的啟動類:研究下 @SpringBootApplication 註解
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class,args); } }
@SpringBootApplication 原始碼: 紅框中的是重點註解
1.@SpringBootConfiguration
在這個註解上面,又有一個@Configuration註解
這個註解的作用就是聲明當前類是一個配置類
然後Spring會自動掃描到添加了@Configuration的類
讀取其中的配置資訊
而@SpringBootConfiguration是來聲明當前類是SpringBoot應用的配置類,專案中只能有一個。所以一般我們無需自己新增。
2.@EnableAutoConfiguration
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import({AutoConfigurationImportSelector.class}) public @interface EnableAutoConfiguration { String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration"; Class<?>[] exclude() default {}; String[] excludeName() default {}; }
開啟自動配置
告訴SpringBoot基於所新增的依賴,去“猜測”你想要如何配置Spring。
比如我們引入了spring-boot-starter-web,而這個啟動器中幫我們添加了tomcat、SpringMVC的依賴
此時自動配置就知道你是要開發一個web應用,所以就幫你完成了web及SpringMVC的預設配置了!
SpringBoot內部對大量的第三方庫或Spring內部庫進行了預設配置
這些配置是否生效,取決於我們是否引入了對應庫所需的依賴
如果有那麼預設配置就會生效
我們使用SpringBoot構建一個專案,只需要引入所需框架的依賴,配置就可以交給SpringBoot處理了
3.@ComponentScan
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) @Documented @Repeatable(ComponentScans.class) public @interface ComponentScan { ... }
配置元件掃描的指令
提供了類似與<context:component-scan>標籤的作用
通過basePackageClasses或者basePackages屬性來指定要掃描的包。
如果沒有指定這些屬性,那麼將從宣告這個註解的類所在的包開始,掃描包及子包
而我們的@SpringBootApplication註解宣告的類就是main函式所在的啟動類,
因此掃描的包是該類所在包及其子包。因此,一般啟動類會放在一個比較前的包目錄中。