Java面试题:Spring自动配置原理

Spring自动配置原理:

首先项目的启动类上有一个@SpringBootApplication注解----这个注解里包含了另外三个注解

@SpringBootConfiguration :声明当前是一个配置类

@EnableAutoConfiguration:实现自动化配置的核心注解

@ComponentScan: 组件扫描,默认扫描当前引导类所在的包及其子包。


@EnableAutoConfiguration:这个注解里面有个@import注解()可以导入一些类把它放到Spring容器中,

@import注解({AutoConfigurationImportSelector.class})这个注解里有个配置,配置自动配置的选择器。它会加载一个文件,把这个文件统一的加载的Spring容器中,在这个文件中有个META-INF包中有个spring.factories文件,这里面有很多以AutoConfiguration结尾(比如AOP的,比如Redis的。大概100多个类)。比如RedisAutoConfiguration这个类,进来之后你会看到,

@Configuration 声明这个是个配置类

@ConditionalOnClass({RedisOperations.class}):这个是判断是否有对应的字节码对象(RedisOperations.class),什么时候才会有这个字节码对象呢,

当导入Redis相关的起步依赖的时候,这个Class文件就存在了。如果存在呢,就会加载这个类。

这个类里有个redisTemplate方法,这个方法的返回值是RedisTemplate,上面有个@Bean注解,也就是要把这个方法的返回值放入到IOC中,所以我们就可以注入了。这个方法上面还有个@ConditionOnMissingBean注解,这个注解的意思判断环境中有没有对应的bean,如果有的话就不再创建了,没有就创建。

相关推荐
小屁孩大帅-杨一凡几秒前
Python-flet实现个人视频播放器
开发语言·python·音视频
万琛几秒前
【java-Neo4j 5开发入门篇】-最新Java开发Neo4j
java·neo4j
算家云3 分钟前
快速识别模型:simple_ocr,部署教程
开发语言·人工智能·python·ocr·数字识别·检测模型·英文符号识别
Thomas_Cai14 分钟前
Python后端flask框架接收zip压缩包方法
开发语言·python·flask
霍先生的虚拟宇宙网络16 分钟前
webp 网页如何录屏?
开发语言·前端·javascript
温吞-ing18 分钟前
第十章JavaScript的应用
开发语言·javascript·ecmascript
Bald Baby19 分钟前
JWT的使用
java·笔记·学习·servlet
魔道不误砍柴功25 分钟前
实际开发中的协变与逆变案例:数据处理流水线
java·开发语言
鲤籽鲲33 分钟前
C# MethodTimer.Fody 使用详解
开发语言·c#·mfc