面试杀手==spring boot 自动装配

本文围绕Spring Boot自动装配展开,先介绍了相关注解含义,如嵌套注解@Service嵌套@Component。还提及Spring提供的扩展接口,重点讲解ImportSeylector。通过分析@SpringBootApplication注解,揭示其组合构成及底层嵌套注解。最后指出自动装配是利用基础注解扩展,导入自定义bean到IOC容器。

spring boot 自动装配为那般
熊大
spring boot作为目前最火的web框架其中最令人津津乐道的便是自动装配只需在配置文件中按照一定的格式配置就能自动连接减少许多不必要的工作。 那它究竟是如何实现自动装配呢?

古语云:工欲善其事必先利其器在了解自动装配之前先做一些准备工作。 先简单看下一些注解的含义

注解作用
@Component基础注解(元注解)可被嵌套
@Configuration声明定义Bean,嵌套了@Component
@Import导入具体类
@ConditionalOnClass类存在时装配
@ConfigurationProperties读取配置文件中的属性

上面提到了嵌套注解顾名思义就是一个注解上标注了其他注解如@Service
在这里插入图片描述
由上图可知@Service注解里面嵌套了@Component注解。从而是它拥有了@Component注解得能力这个就类似继承子类拥有父类的能力。不光@Service注解嵌套了@Component, @Controller也是如此。

spring
对外提供了一些接口方便我们扩展如:BeanFactoryPostProcessor、BeanPostProcessor、ImportSeylector等接口
我们重点了解下ImportSeylector 他是spring提供一个批量加载把bean导入ioc的接口。

首先我们看下SpringBootApplication注解他是否是嵌套得注解:在这里插入图片描述

如图所示:
@SpringBootApplication由三个注解组合而成其中
@SpringBootConfiguration嵌套了@Configuration这标明这是一个配置类
@EnableAutoConfiguration则是由@AutoConfigurationPackage,@Import注解构成。

也就是说@SpringBootApplication注解是由多个注解组合而成底层嵌套了一些spring
提供得注解以便spring在启动得时候能够对@SpringBootApplication注解进行处理。

看下@Import注解导入了那个类具体对spring那个接口进行了扩展
在这里插入图片描述

由上面类图可以看到最后都集中到了AutoConfigurationImportSelector这个类上。那么我们先看下selectImports
这个方法具体实现autoconfigurationimportselector.selectimports.png 方法调用关系图如下:

在这里插入图片描述

那看下loadFactoryNames都干了什么?在这里插入图片描述

请看源码标红得地方:他是读取了"META-INF/spring.factories" 然后解析处理返回了list
打开这个spring.factories看看究竟是什么东西

在这里插入图片描述

我们发现这里有好多类比较眼熟mysql、redis、rabbitmq,mongodb,es就拿DataSourceAutoConfiguration看下他又是什么东东

在这里插入图片描述

此处可以看出DataSourceAutoConfiguration上标注了多个注解我们这里只关注*@EnableConfigurationProperties*这个注解里面得class。

在这里插入图片描述

当看到==ConfigurationProperties(prefix=“spring.datasource”)==是不是非常眼熟呢?这个不就是我们配置文件配置的属性嘛?当然如果你想你的配置生效还需要在pom文件中加上相对应得starter。如果没有添加他不会去加载得。源码中是有过滤得这也符合我们得预期需要得加载不需要得不用。

其实到这里spring boot自动装配得神秘面纱已经揭开了:

  • @SpringBootApplication是一个组合注解它利用spring 提供得基础注解做扩展。利用@Import导入自定义得bean
    这个bean则实现了spring 得接口进行自定义扩展导入到ioc容器中。

备注:
文中使用了大量得图片所以对一些源码进行了删减保留了重要得方法。
最好看完之后在idea中跟着源码点下这样更加清晰。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值