Spring boot自动装配原理探究

Spring boot自动装配原理探究

        springboot项目启动时,会自动帮我们加载许多的配置类,这个过程是怎么实现的呢?其实是主启动类上的注解@SpringBootApplication帮我们做的

光标移动到主启动类上方的注解SpringbootApplication,发现这是个复合注解

在这里插入图片描述

点进去后再点击@EnableAutoConfiguration
在这里插入图片描述

其中@Import({AutoConfigurationImportSelector.class})是核心注解,点进去这个类,里面有个获取候选配置的方法,点进去看

在这里插入图片描述

再点击SpringFactoriesLoader这个类

在这里插入图片描述

最终我们发现是通过SpringFactoriesLoader.loadFactoryNames()扫描所有具有META-INF/spring.factories的jar包。

在这里插入图片描述

也就是说,所有META-INF 目录下有spring.factories的jar包下的类在启动时就被自动装配了
在这里插入图片描述
这些AutoConfiguration结尾的类都被自动装配了
不过,并不是自动装配了的类就能生效,我们接着往下看

随便找个xxxAutoconfiguration类看看,这里我们选了DataSourceTransactionManagerAutoConfiguration这个类

在这里插入图片描述
这里的@Configuration注解表明该类是一个配置类,后面如果我们要扩展这个类的功能,也需要给自定义的类加上这个注解,我们定义的类就会出现在List getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes)里面的候选类中。

看到@ConditionalOnClass({JdbcTemplate.class, TransactionManager.class})这句,意思是必须要系统有JdbcTemplate.class和TransactionManager.class这两个类存在,这个配置类的所有组件才能生效,否则即便这个自动配置类被装配了也无法生效。

现在我们看最下面的注解@EnableConfigurationProperties({DataSourceProperties.class}),这个注解也是最重要的一个,“约定大于配置”在这里得到很好的体现。点进去这个DataSourceProperties.class

在这里插入图片描述

我们发现这个类中包含了很多属性,下面还有很多这些属性的set()和get()方法,我没截出来

这个唯一的注解@ConfigurationProperties是负责把当前这个类和application.yml/properties配置文件绑定起来的,并把我们自定义的配置注入到这个类中去,也就是说,我们可以自行更改这些属性

在这里插入图片描述

回到上面第二个图,注解@EnableConfigurationProperties({DataSourceProperties.class})的作用就是把{}里的这个类加载到IOC容器中,我们使用时只需自动注入就行了。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值