spring boot自动配置与启动流程分析
spring boot自动配置与启动流程分析
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
/**
* The value may indicate a suggestion for a logical component name,
* to be turned into a Spring bean in case of an autodetected component.
* @return the suggested component name, if any (or empty String otherwise)
*/
@AliasFor(annotation = Component.class)
String value() default "";
}
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface MyController {
}
@MyController的类也可以被spring实例化,放到spring容器中托管。其实spring boot也是类似手法。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
/**
* Exclude specific auto-configuration classes such that they will never be applied.
* @return the classes to exclude
*/
Class<?>[] exclude() default {};
/**
* Exclude specific auto-configuration class names such that they will never be
* applied.
* @return the class names to exclude
* @since 1.3.0
*/
String[] excludeName() default {};
}
在线版:http://on-img.com/chart_image/5a600665e4b010a6e720bf6b.png
或git地址。(右键新标签打开该图片可以放大查看)
图上其实都加上了部分注解,下面拿些我认为重要的说一下:
package com.sdcuike.springboot.practice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author sdcuike
* @date 2018/01/17
* @since 2018/1/17
*/
@SpringBootApplication
public class SpringApplicationBoot {
public static void main(String[] args) {
SpringApplication.run(SpringApplicationBoot.class, args);
}
}
上面几行代码加一个注解@SpringBootApplication,就可以启动spring boot 应用,代码
SpringApplication.run(SpringApplicationBoot.class, args);主要实现的功能如图所示:
其中包括了spring 容器的初始化功能。功能4表示根据判断的应用类型创建相应的spring 容器,在作者这里是web应用,所以是AnnotationConfigServletWebServerApplicationContext,此容器默认的构造函数实现的功能如下图所示:
这个容器主要注册和注解相关的post processors实例,大部分都是BeanFactoryPostProcessor及BeanPostProcessor的子类。主要处理spring的注解@Configuration、 @Autowired、@Value、@Injec、 @Required、 @PostConstruct、@PreDestroy 、
@EventListener等等。其中ConfigurationClassPostProcessor 处理 带有注解@Configuration的类。
这些和注解相关的post processors实例的功能处理主要由org.springframework.context.support
.AbstractApplicationContext#invokeBeanFactoryPostProcessors调用:
功能如上图所示,而且spring boot的注解@EnableAutoConfiguration中的
@Import(AutoConfigurationImportSelector.class)开始加载spring boot约定好的自动配置类。以后的流程是经典的spring容器实例化类的流程,不在叙述了。
上一篇: Sport版苹果表质保期外的服务收费下调至199美元
下一篇: 进制转换的一些小方法
推荐阅读
-
Spring Boot自动配置原理与实践(一)
-
Spring Boot自动配置与Spring 条件化配置
-
spring boot集成selenium,chromedriver 自动化测试 启动不报错com.google.common.util.concurrent(从安装配置到运行成功)
-
spring boot自动配置与启动流程分析
-
Spring Boot自动配置原理分析
-
Spring Boot自动配置原理与实践(一)
-
Spring Boot自动配置与Spring 条件化配置
-
spring boot集成selenium,chromedriver 自动化测试 启动不报错com.google.common.util.concurrent(从安装配置到运行成功)