转载

SpringBoot三大注解

在SpringBoot的启动类中,只有一个@SpringBootApplication的注解,点进去会发现它是一个复合注解,由@SpringBootConfiguration,@EnableAutoConfiguration和@ComponentScan组成,被称为SpringBoot三大注解

阅读此文前必须了解《ConfigurationClassPostProcessor源码探究与SpringBoot三大注解铺垫》的内容

我们来解决上文提出的两个问题

  • 有时被@ComponentSacn扫到的AutoConfiguration不满足@Conditional条件
  • SpringBoot三大注解( @SpringBootConfiguration, @EnableAutoConfiguration, @ComponentScan )如何工作
@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 {
    // 省略...
}
复制代码

1 @SpringBootConfiguration

它相当于是一个@Configuration注解,使用它是为了方便在Spring Test中被发现. 本质上属于@Configuration,这是个Spring很很很重要的配置注解,具体使用方法请参考官方文档,源码相关可了解.........一文

2 @EnableAutoConfiguration

2.1 AutoConfigurationImportSelector

它实现了自动装配功能,是一个DeferredImportSelector,具体分析可以参考《ConfigurationClassPostProcessor源码探究与SpringBoot三大注解铺垫》的1.4章节

2.2 AutoConfigurationPackage

是一个ImportBeanDefinitionRegistrar,将AutoConfigurationPackages注册到BeanFactory,供其他功能使用,官方注释写的是JPA entity scanner,但暂时我没看到比较常用的做法.

原文  https://juejin.im/post/5e8990ac51882573c66cfa52
正文到此结束
Loading...