Spring boot:注解@SpringBootApplication
程序员文章站
2022-05-22 09:45:45
...
1.美图
2.源码
@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 {
@AliasFor(annotation = EnableAutoConfiguration.class)
Class<?>[] exclude() default {};
@AliasFor(annotation = EnableAutoConfiguration.class)
String[] excludeName() default {};
@AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
Class<?>[] scanBasePackageClasses() default {};
@AliasFor(annotation = Configuration.class)
boolean proxyBeanMethods() default true;
}
可以发现它是由众多注解组合而成的,下面具体分析下这里每个注解所起到的作用。
-
@Target
Target通过ElementType来指定注解可使用范围的枚举集FIELD/METHOD/PARAMETER...
-
@Retention
Retention(保留)注解说明,这种类型的注解会被保留到那个阶段. 有三个值:-
RetentionPolicy.SOURCE
—— 这种类型的Annotations只在源代码级别保留,编译时就会被忽略 -
RetentionPolicy.CLASS
—— 这种类型的Annotations编译时被保留,在class文件中存在,但JVM将会忽略 -
RetentionPolicy.RUNTIME
—— 这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使
-
-
@Documented
注解表明这个注解应该被javadoc
工具记录. 默认情况下,javadoc
是不包括注解的. 但如果声明注解时指定了@Documented
,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中 -
@Inherited
允许子类继承父类的注解,仅限于类注解有用,对于方法和属性无效。 -
@SpringBootConfiguration
注解实际上和@Configuration
有相同的作用,配备了该注解的类就能够以JavaConfig的方式完成一些配置,可以不再使用XML配置。 -
@ComponentScan
这个注解完成的是自动扫描的功能,相当于Spring XML
配置文件中的:<context:component-scan>
,可使用basePackages
属性指定要扫描的包,及扫描的条件。如果不设置则默认扫描@ComponentScan
注解所在类的同级类和同级目录下的所有类,所以我们的Spring Boot项目,一般会把入口类放在顶层目录中,这样就能够保证源码目录下的所有类都能够被扫描到。 -
@EnableAutoConfiguration
这个注解是让Spring Boot
的配置能够如此简化的关键性注解。
2. EnableAutoConfiguration
我把EnableAutoConfiguration
的实现端上来了,大家来鉴赏一下!
@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 {};
}
-
@AutoConfigurationPackage
注解用于保存自动配置类以供之后的使用,比如给JPA entity
扫描器,用来扫描开发人员通过注解@Entity
定义的entity
类。通俗的讲就是,注册bean
定义到容器中。 -
@Import(AutoConfigurationImportSelector.class)
是EnableAutoConfiguration
注解中最关键的来,它借助AutoConfigurationImportSelector
,可以帮助SpringBoot
应用将所有符合条件的@Configuration
配置都加载到当前SpringBoot创建并使用的IoC容器中。关于@Import注解要说的内容还比较多,改天再聊。
推荐阅读
-
十、Spring boot 简单优雅的整合 Swagger2
-
使用Spring Boot和AspectJ实现方法跟踪基础结构
-
spring boot 一个项目启动多个实例
-
spring boot 2 集成JWT实现api接口认证
-
Jenkins + Docker + dockerfile-maven-plugin + Harbor CI/CD spring-boot项目的最轻量级配置
-
Spring Boot 的静态资源处理
-
Spring Boot2 系列教程(一) | 如何使用 IDEA 构建 Spring Boot 工程
-
Spring注解之@Autowired、@Qualifier、@Resource、@Value
-
Spring-Boot使用嵌入式容器,那怎么配置自定义Filter呢
-
创建简单spring boot项目