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中,配置了自动扫描方案
ConditionalOnBean 容器中有指定Bean
ConditionalOnClass 类路径下有指定类
ConditionalOnCloudPlatform
ConditionalOnExpression 基于SpEL表达式作为判断条件
ConditionalOnJava 基于JVM版本作为判断条件
ConditionalOnJndi 在JNDI存在的条件下查总指定位置
ConditionalOnMissingBean 容器中没有指定Bean的情况下
ConditionalOnMissingClass 类路径下没有指定类
ConditionalOnNotWebApplication 当前项目不是Web项目
ConditionalOnProperty 指定属性是否存在
ConditionalOnResource 类路径是否有指定值
ConditionalOnSingleCandidate 指定Bean在容器中只有一个,或者虽然有多个但是指定首选的Bean
ConditionalOnWebApplication 当前项目是Web项目