当前位置: 首页 > news >正文

java springboot Reflections工具扫描项目中带有某个注解的方法(类似@SpringBootApplication扫描各种注解)

文章目录

  • java springboot Reflections工具扫描项目中带有某个注解的方法(类似@SpringBootApplication扫描各种注解)
    • 简单示范
    • @EnableDistributeDelayTask配置路径扫描示范(类似于@SpringBootApplication)

java springboot Reflections工具扫描项目中带有某个注解的方法(类似@SpringBootApplication扫描各种注解)

简单示范

// 要扫描的包路径
String[] scanPackages = new String[]{"cn.humorchen.delaytask"};
// 创建过滤器
FilterBuilder filterBuilder = new FilterBuilder();
for (String scanPackage : scanPackages) {// 添加要扫描的包路径filterBuilder.includePackage(scanPackage);
}
// 创建扫描配置
Configuration configuration = new ConfigurationBuilder().forPackages(scanPackages).filterInputsBy(filterBuilder).setScanners(Scanners.MethodsAnnotated);
// 使用Reflections  进行扫描
Reflections reflections = new Reflections(configuration);
// 获得加了DelayTask注解的方法
Set<Method> methodsAnnotatedWithDelayTask = reflections.getMethodsAnnotatedWith(DelayTask.class);

在这里插入图片描述

@EnableDistributeDelayTask配置路径扫描示范(类似于@SpringBootApplication)

 public void scanProjectTask() {// 状态切换CASif (INIT.compareAndSet(false, true)) {// 要扫描的包路径HashSet<String> scanPackageSet = new HashSet<>();// 通过上下文拿加了启用注解的BeanMap<String, Object> beansWithAnnotation = applicationContext.getBeansWithAnnotation(EnableDistributeDelayTask.class);for (Object bean : beansWithAnnotation.values()) {// 获取注解EnableDistributeDelayTask enableDistributeDelayTask = AnnotationUtil.getAnnotation(bean.getClass(), EnableDistributeDelayTask.class);// 将注解中配置的扫描路径加入集合if (enableDistributeDelayTask != null && enableDistributeDelayTask.scanPackages() != null && enableDistributeDelayTask.scanPackages().length > 0) {scanPackageSet.addAll(Arrays.asList(enableDistributeDelayTask.scanPackages()));}// 将bean当前路径加入集合scanPackageSet.add(bean.getClass().getPackage().getName());}String[] scanPackages = scanPackageSet.toArray(new String[0]);// 构建过滤器构造器FilterBuilder filterBuilder = new FilterBuilder();for (String scanPackage : scanPackages) {// 将每个包加入其中filterBuilder.includePackage(scanPackage);}// 构建配置Configuration configuration = new ConfigurationBuilder().forPackages(scanPackages).filterInputsBy(filterBuilder).setScanners(Scanners.MethodsAnnotated);// 创建反射工具对象ReflectionsReflections reflections = new Reflections(configuration);//扫描所有加了注解的方法Set<Method> methodsAnnotatedWithDelayTask = reflections.getMethodsAnnotatedWith(DelayTask.class);// 遍历这些方法for (Method method : methodsAnnotatedWithDelayTask) {// 拿到注解DelayTask delayTaskAnnotation = AnnotationUtil.getAnnotation(method, DelayTask.class);if (delayTaskAnnotation != null) {// 执行加载逻辑String taskName = delayTaskAnnotation.value();checkTaskMethodArgsAndReturnType(taskName, method);checkTaskNameConflict(taskName, method);taskNameSet.add(taskName);methodMap.put(taskName, method);annotationMap.put(taskName, delayTaskAnnotation);}}} else {log.warn("【DistributeDelayTask】 DistributeDelayTaskServiceImpl has been initialized, skip scanProjectTask");}}

AnnotationUtil 见博客
https://humorchen.blog.csdn.net/article/details/139798211

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ECMAScript 2024 新特性,示例参考
  • 深入探究 Vue.js 高级技术:从响应式系统到高效组件设计的实战指南
  • 算法笔记|Day14二叉树IV
  • 5.缓存雪崩问题及解决思路
  • C# Unity 面向对象补全计划 之 接口
  • 血细胞自动检测与分类系统:深度学习与UI界面的结合
  • linux磁盘可视化分析工具
  • spring boot + vue3 接入钉钉实现扫码登录
  • 算法强训day19
  • Qt的事件处理机制、信号和槽以及两者之间的区别
  • 软件测试---Jmeter
  • Java每日一练_模拟面试题1(死锁)
  • Yearning-MYSQL 审计平台部署
  • 导入数据到hive的几种方式
  • @RequestBody与@RequestParam
  • 时间复杂度分析经典问题——最大子序列和
  • cookie和session
  • es6(二):字符串的扩展
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Netty 4.1 源代码学习:线程模型
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • spring cloud gateway 源码解析(4)跨域问题处理
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 安卓应用性能调试和优化经验分享
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 携程小程序初体验
  • 在electron中实现跨域请求,无需更改服务器端设置
  • ​一些不规范的GTID使用场景
  • #include<初见C语言之指针(5)>
  • #includecmath
  • #java学习笔记(面向对象)----(未完结)
  • #nginx配置案例
  • #vue3 实现前端下载excel文件模板功能
  • (1)Nginx简介和安装教程
  • (12)目标检测_SSD基于pytorch搭建代码
  • (13)Hive调优——动态分区导致的小文件问题
  • (ibm)Java 语言的 XPath API
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (TOJ2804)Even? Odd?
  • (备忘)Java Map 遍历
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转)人的集合论——移山之道
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET/C#⾯试题汇总系列:⾯向对象
  • .NET面试题(二)