Spring Boot 项目启动的时候加载主配置类, 并开启了自动配置功能.(Spring Boot 的自动配置功能是 Spring Boot 的一大重要且突出的特性)
那么我们需要了解下它:
如何加载主配置类?
通过 @SpringBootApplication 的注解来找到并加载主配置类.
如何开启自动配置功能?
点进 @SpringBootApplication 的源码后可以发现这样一段代码, 说明 @SpringBootApplication 注解由多个注解组成.
其中, 自动配置功能主要就是依靠 @EnableAutoConfiguration 注解实现的.
点进 @EnableAutoConfiguration 注解后可以发现, 该注解也是一个组合注解, 下面一步步解析各个注解
1.@Target
java.lang.annotation.Target 用于设定注解使用范围
java.lang.annotation.ElementType
Target 通过 ElementType 来指定注解可使用范围 (上面使用的是 ElementType.Type), 参考如下图:
2.@Retention(RetentionPolicy.RUNTIME)
Retention(保留) 注解说明, 这种类型的注解会被保留到哪个阶段 (注解的生命周期)
RetentionPolicy.SOURCE -- 这种类型的 Annotations 只在源代码级别保留, 编译时就会被忽略 .
RetentionPolicy.CLASS -- 这种类型的 Annotations 编译时被保留, 在 class 文件中存在, 但 JVM 将会忽略 .(这是默认的生命周期)
RetentionPolicy.RUNTIME -- 这种类型的 Annotations 将被 JVM 保留, 所以他们能在运行时被 JVM 或其他使用反射机制的代码所读取和使用.
3@Documented
Documented 注解表明这个注解应该被 javadoc 工具记录. 默认情况下, javadoc 是不包括注解的. 但如果声明注解时指定了 @Documented, 则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中.(javadoc 是 Sun 公司提供的一个技术, 它从程序源代码中抽取类, 方法, 成员等注释形成一个和源代码配套的 API 帮助文档. 也就是说, 只要在编写程序时以一套特定的标签作注释, 在程序编写完成后, 通过 Javadoc 就可以同时形成程序的开发文档了. javadoc 命令是用来生成自己 API 文档的, 使用方式: 使用命令行在目标文件所在目录输入 javadoc + 文件名. java.)
4.@Inherited
@Inherited 注解标记其他的注解用于指明标记的注解是可以被自动继承的.(注意: 此注解只对注解标记的超类有效, 对接口是无效的.)
5.@AutoConfigurationPackage
自动配置包的注解, 将主配置类所在的包及下面所有的子包里面的组件扫描到 Spring 容器中
6.@Import({AutoConfigurationImportSelector.class})
使用 AutoConfigurationImportSelector 选择器给容器中导入一些组件, 全部导入的组件可以在 jar 包中找到 (在 spring.factories 中)
每一个自动配置类都会进行自动配置功能.
例如: AOP 的自动配置类
其中的注解如下:
@Configuration: 表明这是一个配置类, 该注解也可以给容器中添加组件
@ConditionalOnClass: 判断当前项目中是否有这个类
@ConditionalOnProperty: 判断配置文件是否存在某个配置 (如果不存在, 判断也是成立的)
因此, spring.factories 中的配置类会根据当前各种不同的条件, 判断该配置类是否生效.
最后, 当配置文件生效的时候, Spring Boot 就完成了自动配置功能.
附: 在配置文件中输入 debug=true, 可以设置项目以 debug 的模式启动, 从而可以看到项目用到了哪些自动配置类
来源: http://www.bubuko.com/infodetail-3004572.html