使用注解实现动态加载类
背景
项目中有些分支暂时不需要用到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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2019-06-17 第十一次会议
2019-06-17 6月9日第十次会议
2019-06-17 6月2日第九次会议
2019-06-17 5月13日第八次会议
2019-06-17 补充会议记录说明
2019-06-17 4月29日第七次会议
2019-06-17 4月22日第六次会议