在springboot中我们构建应用不用在像spring中那么繁琐,必须声明bean,然后才能使用,在springboot只要引入了相关的jar包,则对应的功能会自动加载扩展。要想理解springboot的自动装配原理,我们首先要知道在spring中中比较重要的几个注解:
- @Import
- @Configuration
比如大家常见的
则是由这几个注解组成。
这里我们必须先说下spring在后面提供的基于注解的启动方式,我们可以直接基于注解,实现 :
可以看到,这里我们就实现了自动装在的功能了,还可以通过接口:
spring实现基于注解的自动装载,实现就在
其中,在构造初始化的时候,有如下逻辑:
AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry);
对应的代码逻辑如下:
可以看到,这步主要是注册了下面几个bean:
- ConfigurationClassPostProcessor
- AutowiredAnnotationBeanPostProcessor
- CommonAnnotationBeanPostProcessor
- EventListenerMethodProcessor
- DefaultEventListenerFactory
其中 就是用来处理 相关逻辑,其集成结构如下:
其实现了,spring容器在bean的定义注册后会调用,在实现如下:
可以看到,这里会对当前所有注册的BeanDefinition进行判断,如果beanDefinition满足条件
- 有Configuration注解,则是FullConfigurationCandidate
- 有Component、ComponentScan、Import、ImportResource注解,则是LiteConfigurationCandidate
同时根据上述属性,设置Bedefinition对应属性:
当获取到满足条件BeanDefinition后,通过来进行实际的解析:
通过上述步骤,将相关注解需要处理的类和方法提取出来,然后通过注册到IOC容器中:
这样,便将注解相关的类都注册到了IOC容器中,那么spring是怎么获取需要扫描哪些bean呢 ?还记得开篇说的的吗,奥秘就在这个类构造时:
就是通过读取需要扫描的类,通过扫描指定的包名,这里就是Spring中实现基于注解方式的@Configuration方式
在springboot中一般springboot应用可以如下:
我们可以看下:
可以看到这里就是springboot自动装配的核心。
我们看看逻辑:
可以看到,主要逻辑是读取中key为的配置列表,然后按照条件对列表进行一定过滤,返回一个集合,spring会加载这个集合。
可以看到,默认情况下,只要我们开启了注解(直接或间接使用),springboot默认会为我们加载这么多的配置类,那么是不是这么多类都加载到IOC容器呢 ?这里我们就需要说下springboot中提供的、、、等条件注解。还记得我们在开头说的在的时候,会调用
可以看到,这里会获取注解上的属性,这里value属性是一个实现了接口的列表,然后实例化这些实现了接口的。可以看到,这里如果bean满足如下条件,则不会注册:
可有看到和的实现都是通过实现。

可以看到,这里和实现本质上是一样的,就是获取注解上对应的bean是否存在,只不过两者在判断结果的时候,判断逻辑相反,而已。
EnableAutoConfigurationMETA-INF/spring.factories
今天的文章 2026年@enableswagger2注解(@enableswagger2doc)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/54697.html