您当前的位置:首页 > 计算机 > 编程开发 > Spring Boot

【SpringBoot】注解学习笔记

时间:12-24来源:作者:点击数:

【是什么】

每个SpringBoot项目的启动类都有一个@SpringBootApplication这个注解,但它到底是什么呢?

1、根据Spring的官方文档介绍,@SpringBootApplication等同于三个注解

2、@SpringBootApplication点进去,删除元注解之后等同于:

@SpringBootConfiguration

@EnableAutoConfiguration

@ComponentScan

3、@SpringBootConfiguration点进去,删除元注解之后等同于:

@Configuration

至此,证明了官方说的@SpringBootApplication等同于:@Configuration、@EnableAutoConfiguration、@ComponentScan

【为什么】

这些注解的作用是什么?继续分析这三个注解

1、@Configuration

点进去,删除元注解之后等同于:@Component

查Spring官方文档发现@Repository、@Service、@Controller都包含了@Component的注解,一旦被该注解修饰的,都会交给Spring IOC容器管理

那么它的作用应该就是bean管理或者导入配置

官方的说法:allow to register extra beans in the context or import additional configuration classes

2、@ComponentScan

点进去之后发现有我们熟悉的配置参数[basePackages]

它的作用:扫描用户自定义的包中的类,把这些声明特定注解的类交给ICO管理

官方的说法:scan on the package where the application is located

3、@EnableAutoConfiguration

点击进去,删除元注解之后等同于:

@AutoConfigurationPackage 
@Import({AutoConfigurationImportSelector.class})  导入springboot项目启动所需要的默认类

那它是怎么兼容第三方包的呢?

打开AutoConfigurationImportSelector,在process方法打断点看一下,发现在方法getAutoConfigurationEntry的configurations加载了很多类的全路径

那它是从哪儿加载进来的呢,咱们再点进 getCandidateConfigurations 方法瞧一瞧

看到了一行断言:

No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.

似乎有点眉目了,据此推测应该是在auto configuration 的META-INF/spring.factories下面,找找看

果然在这儿,至此,对SpringBoot的自动装配似乎多了几分了解,但是可以看到,加进来的配置和配置文件的不是完全一样,因为还有@Conditional条件判断,比如那些配置了全路径却没有导包进来的,就会被过滤掉,不会进行实例化。

bean注入的条件判断也是个模块,今天先看到这儿,后续再进一步深入。

【备注】

项目基于SpringBoot2.1.6

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门