黑马程序员技术交流社区
标题:
【广州校区】SpringBoot运行原理
[打印本页]
作者:
帅气de路人甲
时间:
2019-7-31 10:23
标题:
【广州校区】SpringBoot运行原理
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项目
原文:
https://www.cnblogs.com/sherrykid/p/6419395.html
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2