Spring Boot配置类原理、Spring Boot核心机制理解,以及实现自动装置的底层原理
目的:从底层源码角度分析 Spring Boot 配置类以及自动装载的底层原理
文章目录
-
-
- 1. Spring Boot 配置类实现自动装载
-
- 1.1 @Configuration注解
- 1.2 @Configuration 注解完成 bean 注入流程图
- 1.3 @ConfigurationProperties注解赋值
- 2. Spring Boot的核心机制:自动装配
-
- 2.1 @SpringBootConfiguration注解
- 2.2 @EnableAutoConfiguration注解
- 2.3 @ComponentScan 注解
- 2.4 总结
-
1. Spring Boot 配置类实现自动装载
在讲 spring 时,spring.xml 中配置的 bean:在进行依赖注入时,通过 ref 属性来进行,也就是手动装载;然后就是自动装载(2种);然后又讲到没有配置文件是怎么装载(通过 @Autowired注解);
这里再来说一个没有配置文件怎么装载(也就是 spring boot 中是如何进行依赖注入的)。
1.1 @Configuration注解
Spring Boot 已经去掉了 XML 文件,那么在 Spring Boot 中是如何进行 bean 依赖注入呢?----> 在 Spring Boot 中,通过配置类的方式来完成 bean 的依赖注入。配置类顾名思义就是专门写一个 Java 类用来做配置,以取代 XML 配置文件的方式,这里的配置类不需要继承任何类,也不需要实现任何接口,只需要在类定义处添加 @Configuration
注解即可。接下来我们通过配置类的形式完成Account 对象的注入。
1、创建配置类 BeanConfiguration
,在类定义处添加 @Configuration
注解,同时定义一个返回值为 Account 的方法,并在方法定义处添加 @Bean 注解,代码如下所示。
配置类可以把它比作 XML 文件:类就等同于 XML 文件本身,类中添加了 @Bean 注解的方法就等同于 XML 文件中的 bean 标签,方法返回的对象就是要注入到容器中的 bean。
2、测试:
发现: 成功从容器中取出了 account 对象,这里是通过 beanName 取值的,所以可以得出结论,当前的 Account 对象 beanName 为 account,我们并没有手动设置 beanName,所以这个 beanName 取的是默认值,那么这里的默认值是如何设置的呢? 并非是取返回值类名首字母小写,而是方法名
1.2 @Configuration 注解完成 bean 注入流程图
1、启动 ApplicationContext
的时候传入配置类。
2、判断配置类是否添加了 @Configuration 注解,如果没有添加则不做处理,如果添加了则解析该配置类。
3、遍历配置类的所有方法,判断这些方法是否添加了 @Bean 注解,如果没有添加则不做处理,如果添加了则说明该方法的返回值就是需要注入的 bean。
4、通过反射机制执行该方法,获得返回值,同时获取方法名。
5、将方法名和返回值以 key-value
的形式存入容器中,供开发者调用。
流程图如下:
1.3 @ConfigurationProperties注解赋值
该注解的作用是在 Spring Boot 项目中直接读取 application.yml 配置文件中的数据并赋值给 bean 中的成员变量。
1、创建一个实体类,添加 @ConfigurationProperties 注解, 并通过 p