spring boot

参考: https://www.jianshu.com/u/763c53661578

@SpringBootApplication是一个注解

@SpringBootConfiguration实际上就是@Configuration,说明这是一个JavaConfig

@ComponentScan,启用注解自动扫描

@EnableAutoConfiguration根据类路径中jar包是否存在来决定是否开启某一个功能的自动配置,比如,我们项目中添加了spring-boot-starter-web依赖,因其关联TomcatSrpingMVC,所以类路径下就会存在TomcatSpring MVCjar扫描jar包里是否含有META-INF/spring.factories文件;并在spring.factories中找到@EnableAutoConfiguration的全路径名称org.springframework.boot.autoconfigure.EnableAutoConfiguration这个key,该key对应的value就是用于声明都需要启用哪些自动配置类。

所有@ConditionalOn开头的注解都是用于进行条件判断

@ConditionalOnWebApplication:当前项目是web项目的条件下才加载当前配置类

@ConditionalOnClass:当类路径下有指定的类的条件下才加载当前配置类

@ConditionalOnProperty:当指定的属性等于指定的值的情况下加载当前配置类

@ConditionalOnMissingBean:当前容器里没有指定的Bean的情况下

从各个AutoConfiguration配置类中可以看到如下注解,基于这些注解可以确定这些AutoConfiguration的初始化顺序:

@AutoConfigureOrder(-2147483648):数越小越先初始化

@AutoConfigureAfter({EmbeddedServletContainerAutoConfiguration.class}):在指定的配置类初始化后再加载

@AutoConfigureBefore({WebMvcAutoConfiguration.class}):在指定的配置类初始化前加载

 

·  @SpringBootConfiguration实际上就是@Configuration,说明这是一个JavaConfig

·  @EnableAutoConfiguration负责扫描jar包中的META-INF/spring.factories来找到要初始化的各种AutoConfiguration

·  各种@Conditional注解决定哪些Bean可以被容器初始化

excludeexcludeName用于关闭指定的自动配

scanBasePackagesscanBasePackageClasses用于指定扫描的路径,默认情况下会自动扫描被@SpringBootApplication注解的类(这里是SpringBootWebDemoApplication)的同级包以及子包中的Bean

application.properties文件debug=true从打印结果中看到,每一个*AutoConfiguration*都对应着一类功能的自动配置类,比如HttpEncodingAutoConfiguration:

 

内置服务器:tomcat,修改内置Tomcat为Jetty

修改pom,去除spring-boot-starter-tomcat的依赖,增加spring-boot-starter-jetty依赖




你可能感兴趣的:(Spring,boot)