A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马