Java动态获取实现某个接口下所有的实现类对象集合
作者:执笔记忆的空白 发布时间:2023-04-01 14:43:20
标签:java,动态,获取,接口,实现类,集合
最近有个需求,我需要获取所有同一类型的定时任务的对象,并自动执行。
我想的方案是:直接获取某个接口下面所有的实现类的对象集合,方便以后只需要 实现这个接口,就能自动被加载执行。话不多说,说说我的实现方案。
开始想着用反射自己写一个工具类,后面懒得去折腾,就直接用第三方工具包了,这里我用的是org.reflections
。
maven配置:
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections-spring</artifactId>
<version>${reflections.version}</version>
<exclusions>
<exclusion>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>
我这里去除javassist
包是因为单独引入了javassist
其他版本
另外就是代码引用了,以DelayedBaseMonitor
接口为例:
List<DelayedBaseMonitor> monitorLists = new ArrayList<>();
Reflections reflections = new Reflections(delayedFindPackageName);
Set<Class<? extends DelayedBaseMonitor>> monitorClasses = reflections.getSubTypesOf(DelayedBaseMonitor.class);
for (Class<? extends DelayedBaseMonitor> monitor : monitorClasses) {
monitorLists.add(ApplicationContext.getBean(monitor));
}
这里我用了Spring
的ApplicationContext
去获取bean
,这样能获取这些实现类里面其他spring
注入的bean
。如果是简单方式的话,你们可以直接通过
monitor.getNewInstance
来实现
来源:https://blog.csdn.net/moneyshi/article/details/78500593


猜你喜欢
- 下面先看一下效果图using UnityEngine;using System.Collections;public class textM
- 尝试了各种防止中文乱码的方式,但是还是乱码;最后还是细节问题导致;解决方式:以及俩种方式是百度的,我的问题不是这俩块1.在requestMa
- 一、什么是JMSJMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(M
- 一个系统上线,肯定会或多或少的存在异常情况。为了更快更好的排雷,记录请求参数和响应结果是非常必要的。所以,Nginx 和 Tomcat 之类
- 一、延迟加载:LazyLoading使用延迟加载,关联的实体必须标注为virtual。本例是标注Destination类里的Lodgings
- java中的前加加++和后加加++,有很多人搞的很晕,不太明白!今天我举几个例子说明下前++和后++的区别!其实大家只要记住一句话就可以了,
- Linq中的排序操作符包括OrderBy、OrderByDescending、ThenBy、ThenByDescending和Reverse
- Author:jeffreyDate:2019-04-08一、开发环境:1、mysql - 5.72、navicat(mysql客户端管理工
- 解析:CLR支持两种类型:值类型和引用类型。用Jeffrey Richter(《CLR via C#》作者)的话来说,“不理解引用类型和值类
- 本文实例为大家分享了Java实现颜色渐变效果的具体代码,供大家参考,具体内容如下RGB色彩,在自然界中肉眼所能看到的任何色彩都可以由红(R)
- 这篇文章主要介绍了Java使用Collections工具类对List集合进行排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一
- Android中的消息处理机制大量依赖于Handler。每个Handler都有对应的Looper,用于不断地从对应的MessageQueue
- 本文实例讲述了C#使用Socket实现发送和接收图片的方法。分享给大家供大家参考。具体如下:using System;using Syste
- 话不多说,请看代码:string xmlFilePath = "D:\\log_xml\\MarInfo.xml"; /
- 多态基本概念和原理剖析多态:多态是C++面向对象的三大特性之一。多态分为静态多态和动态多态。静态多态:函数重载和运算符重载属于静态多态,复用
- 前言人类建造迷宫已有5000年的历史。在世界的不同文化发展时期,这些奇特的建筑物始终吸引人们沿着弯弯曲曲、困难重重的小路吃力地行走,寻找真相
- 废话不多说了,直接给大家贴代码了。具体代码如下所示:using System;using System.Collections.Generi
- Java中Class类的作用与深入理解 在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识。这个信
- 本文主要是分析Spring bean的循环依赖,以及Spring的解决方式。 通过这种解决方式,我们可以应用在我们实际开发项目中。1. 什么
- 在窗体中添加DataGridView控件和ConTextMenuStrip1控件,修改DataGridView属性,将contextMenu