Spring Boot並沒有任何新的技術,全都是基於Spring4提供的技術,用優秀的設計,為Web開發提供了一套新的方式。
在HelloWorld中,我們沒有進行任何顯示的配置,但是程序還是運行起來了,那么Spring Boot是怎么做到的呢?那就得從啟動類說起。
想要查看原理,肯定得看源碼,下面就稍微來小小的瞄幾眼@SpringBootApplication這個注解
...
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
......
}
@EnableAutoConfiguration會根據類路徑中的jar依賴為項目進行自動配置,如:添加了spring-boot-starter-web依賴,會自動添加Tomcat和Spring MVC的依賴,Spring Boot會對Tomcat和Spring MVC進行自動配置
@SpringBootApplication 掃描的是此類同級包及其下屬包的Bean,建議放在groupId+arctifactId包下
spring-boot-autoconfigure-1.5.1.RELEASE.jar中的META-INF,下的spring.factories # Auto Configure中,配置了自動掃描方案
ConditionalOnBean 容器中有指定Bean
ConditionalOnClass 類路徑下有指定類
ConditionalOnCloudPlatform
ConditionalOnExpression 基於SpEL表達式作為判斷條件
ConditionalOnJava 基於JVM版本作為判斷條件
ConditionalOnJndi 在JNDI存在的條件下查總指定位置
ConditionalOnMissingBean 容器中沒有指定Bean的情況下
ConditionalOnMissingClass 類路徑下沒有指定類
ConditionalOnNotWebApplication 當前項目不是Web項目
ConditionalOnProperty 指定屬性是否存在
ConditionalOnResource 類路徑是否有指定值
ConditionalOnSingleCandidate 指定Bean在容器中只有一個,或者雖然有多個但是指定首選的Bean
ConditionalOnWebApplication 當前項目是Web項目