【SpringBoot】注解学习笔记

【是什么】

每个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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值