⭐️SpringBoot中的自动装配

前言

关于SpringBoot的自动装配一直有点疑问,写一篇博客记录一下

使用条件注解

以下是代码的结构和配置类的信息,SpringBoot启动的时候,会默认扫描同包的类和子包的类。 所以我们的配置类会被加载,在配置类中写了一个注解ConditionalOnBean,它的意思是当我们ioc容器中有user这个bean实例的时候,创建User这个类,并放到ioc容器中,但是容器中还没创建过这个类,所以会报错。
image.png

当启动主程序的时候,报错了。说没有User这个bean,说明没有注册到IOC容器中。
image.png

ConditionalOnProperty结合配置文件

@ConditionalOnProperty(value = “user.enable”),当使用该注解时,需在配置文件中指定user.enable=true,该条件才会生效。如果需要指定其他值的时候,@ConditionalOnProperty(value = “user.enable”,havingValue = “”),havingValue为具体需要的值。
image.png
image.png

自定义自动配置类和注册

现在有两个隔离的模块demo,demo1,如果需要在demo1中使用demo模块中的类。并且demo中的类已经进行了相关的配置。该怎么做呢?

如果直接引入过来,获取User bean对象的时候,会直接报错,即使在User上加Compoent注解,还是会报错。因为 SpringBoot启动的时候,会默认扫描同包的类和子包的类。 他们所在的包不一样,所以扫描不到。
image.png
现在给出一个场景,我们使用一些第三方工具的时候,直接@Autowired自动注入就可以直接使用了,第三方的包结构和我们开发代码的包结构不一样,那么第三方的类是怎么自动注入到IOC容器的呢?

假如demo是第三方写的代码,我们需要在demo1模块终自动注入User类,就需要自定义配置了。配置文件还是不变,可以在配置文件中做各种配置。然后在META-INF/spring.factories文件中注册你的自动配置类,以便Spring Boot能够找到并加载它。
image.png
image.png

这样demo1启动的时候就不会报错了,第三方自动配置也是这种做的,只是在配置文件中配置的东西更复杂。
image.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值