在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
到此这篇@enableswagger2注解(@enableswagger2doc)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/26587.html