使用注解实现动态加载类


背景

项目中有些分支暂时不需要用到kafka的消费监听,但以后可能会用到。于是需要一个方法可以动态开关kafka相关功能。


解决方案

通过注解@ConditionalOnProperty或注解@ConditionalOnBean实现,推荐使用@ConditionalOnProperty。

@ConditionalOnProperty

使用方法:在类名上方加以下注解

@ConditionalOnProperty(name = "kafkaEnable", havingValue = "true", matchIfMissing = true)

含义:配置文件(.properties文件或.yaml文件)中有字段kafkaEnable = false则不加载该类,无对应配置字段或= true则加载

@ConditionalOnBean

使用方法:在类名上方加以下注解

@ConditionalOnBean(xxxx.class)

含义:当xxxx.class bean加载后,加载该类,否则不加载。

使用时可能出现的问题

当上梯队向下梯队使用@ConditionalOnBean时,会导致无法成功注册。
Bean注册优先级梯队

第一梯队如下:
1.1. 扫描的Bean,包括直接扫描、自动配置中扫描、启用组件中扫描的Bean:
    即扫描标注了 @Controller @Service @Repository @Component 的类
1.2. 直接的Java配置,即@SpringBootApplication直接覆盖的包下用@Bean注册的Bean

第二梯队如下:
2.1. 启用组件中的Java配置注册的Bean,即在@Enable...引入、而且使用@Bean注册的Bean

第三梯队如下:
3.1. 自动配置中的Java配置注册的Bean,即在自动配置中引入、而且使用@Bean注册的Bean

总结

以上介绍了怎么通过@ConditionalOnProperty@ConditionalOnBean注解实现动态加载类,并对Bean注册优先级梯队进行了简单的介绍。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值