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项目
 
原文地址:https://www.cnblogs.com/sherrykid/p/6419395.html