了解springboot的自动配置原理

1、开启自动配置的注解

@EnableAutoConfiguration

比如在我们的启动类上一般会有这么个注解

@SpringBootApplication
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class,
        DataSourceTransactionManagerAutoConfiguration.class,
        JdbcTemplateAutoConfiguration.class})
public class MultiDataSourceDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(MultiDataSourceDemoApplication.class, args);
    }
}

从上面的代码我们看不到@EnableAutoConfiguration这个注解,那是如何启动自动配置的?答案就是@SpringBootApplication上已经有了这个注解,如下图。exclude中是不需要自动配置的类,因为我们要自己配置,不用springboot自带的。

 2、@EnableAutoConfiguration是如何实现的自动配置

EnableAutoConfiguration这个类中,import了AutoConfigurationImportSelector

 

AutoConfigurationImportSelector类中的getCandidateConfigurations方法。只从Assert中的文字中可以看出,是从META-INF/spring.factories加载的自动配置类,当然,这个方法点进去后也能看到。

我们去找一下META-INF/spring.factories这个文件,看看里面有什么。从下面的图片中我们看到了,里面全是一些配置类的路径,根据这些路径就会找到这些配置类,并自动加载到spring容器中。也就是说META-INF/spring.factories中存放的就是springboot会自动配置的类。

 3、总结一下:

@SpringBootApplication注解实现了@EnableAutoConfiguration这个注解,而EnableAutoConfiguration又import了AutoConfigurationImportSelector这个类。AutoConfigurationImportSelectorgetCandidateConfigurations方法会去加载META-INF/spring.factories中的类,这样就实现了自动配置。

如果我们想自己配置,比如实现多个数据源的配置。那就需要用上面所提到的exclude方式排除掉与之相关的自动配置类,比如DataSourceAutoConfiguration。

4、条件注解

springboot会根据这些条件注解,符合条件注解的才会去自动配置。

@Conditional:这注解会指定一个类,这个类中有一些条件判断,符合这个类中的条件判断才会生效。

@ConditionalOnClass:当我的classpath中出现某个类的时候生效。

@ConditionalOnBean:在spring容器中已经存在某个bean的时候生效。

@ConditionalOnMissingBean:在不存在某个bean的条件下生效。

@ConditionalOnProperity.........

可以自己在META-INF/spring.factories随便找一个类,点击去看看,一般都会用到一个或多个条件注解。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值