Spring Boot 運行原理


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中,配置了自動掃描方案
 
        
  1. ConditionalOnBean                    容器中有指定Bean
  2. ConditionalOnClass                    類路徑下有指定類
  3. ConditionalOnCloudPlatform
  4. ConditionalOnExpression                基於SpEL表達式作為判斷條件
  5. ConditionalOnJava                    基於JVM版本作為判斷條件
  6. ConditionalOnJndi                    在JNDI存在的條件下查總指定位置
  7. ConditionalOnMissingBean            容器中沒有指定Bean的情況下
  8. ConditionalOnMissingClass            類路徑下沒有指定類
  9. ConditionalOnNotWebApplication        當前項目不是Web項目
  10. ConditionalOnProperty                指定屬性是否存在
  11. ConditionalOnResource                類路徑是否有指定值
  12. ConditionalOnSingleCandidate            指定Bean在容器中只有一個,或者雖然有多個但是指定首選的Bean
  13. ConditionalOnWebApplication            當前項目是Web項目
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM