Spring Boot的设计方向
- 可以穿件独立的Spring应用程序,可以创建可执行的jars
- 内嵌tomcat或jetty等Servlet容器
- 提供“入门”依赖项,以简化构建配置。尽可能自动配置Spring和第三方库
- 提供可用于生产的功能,例如指标、运行状况检查和外部化配置
Spring Boot注解
了解基本的启动注解
@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 {
...
AnnotationUtil.java,该类会一级一级往上找
- @SpringBootApplication
- @SpringBootConfiguration
- @Configuration
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration public @interface SpringBootConfiguration { ...
- @Configuration
- @EnableAutoConfiguration
-
@Import(AutoConfigurationImportSelector.class)
AutoConfigurationImportSelector是自动配置引入的选择器,它的任务是引入SpringBoot早已定义好的默认的一些Bean。包括SpringMVC涉及到的DispatcherServletAutoConfiguration和WebMVCAutoConfiguration(原本这些配置需要在bean.xml中手动配置)。——体现了Convention Over Configuration(约定优于配置)
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import(AutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration { ...
-
- @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(classes = AutoConfigurationExcludeFilter.class)}):
- 第一个为用户自定义的指定类型排除过滤器
- 第二个,当用户自定义了一个@Configuration配置类,并且在spring.factories配置文件中配置时,会被第二个过滤器排除
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Documented @Repeatable(ComponentScans.class) public @interface ComponentScan { ...
- @SpringBootConfiguration
ApplicationContext
了解Spring应用上下文接口
- 后面按顺序解读,主要需要关注SpringApplication.run()中的几个点:
- createApplicationContext:创建应用上下文
- prepareContext:向上下文注册一些bean
- refreshContext:如果是tomcat,则调用AnnotationConfigServletWebServerApplicationContext的refreshContext()刷新上下文
- 这一点在第三部分@Configuration注解中进行解读
- 启动类
@SpringBootApplication
public class SpbtApplication {
public static void main(String[] args) {