关闭

Java动态获取某个接口下所有的实现类对象集合

804人阅读 评论(0) 收藏 举报
分类:


最近有个需求,我需要获取所有同一类型的定时任务的对象,并自动执行。

我想的方案是:直接获取某个接口下面所有的实现类的对象集合,方便以后只需要 实现这个接口,就能自动被加载执行。话不多说,说说我的实现方案。


开始想着用反射自己写一个工具类,后面懒得去折腾,就直接用第三方工具包了 , 这里我用的是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来实现









0
1
查看评论

Java 获取接口所有实现类

利用Spring的Bean工厂,获取接口所有实现类。
  • RickyIT
  • RickyIT
  • 2017-10-10 23:17
  • 648

java反射获取某接口的所有实现类

@SuppressWarnings("unchecked") private List<Class<ScmJob>> getAllSubclassOfTestInterface() { Field field = null; ...
  • yzt33
  • yzt33
  • 2016-03-08 23:02
  • 6752

通过反射机制获取位于同一个包下的接口的所有实现类

通过反射机制获取位于同一个包下的接口的所有实现类   public class ClassUtils {    public static List getAllImplClassesByInterface(Class c) {      // 给一个接口,返回这个...
  • jiang123986
  • jiang123986
  • 2016-12-14 20:43
  • 1104

通过接口获取所有实现类以及通过注解获取实现类的思路

近日,工作上被安排修改项目,别人写的一套内外网同步系统,修改成一套上报下发系统,处理很复杂,在原先那人的基础上修改了不少源代码,比较痛苦的是修改他的源代码,必须要看懂全部代码,改的才能顺利进行下去,其实这是违反面向对象的一项重要原则——开闭原则,像这样的代码,换个人写,时间成本会很高,而如果做好了面...
  • ckao7470
  • ckao7470
  • 2015-08-06 14:30
  • 7273

JAVA-获取实现了指定接口类的所有实现类或继承了指定类的所有子类

实际编程过程中,我们可能遇到这样的问题,就是获取实现了指定接口类的所有实现类。 本工具类就提供了这样的功能。下面是工具类的详细解析: /** * 查找指定路径下面实现指定接口的全部类 * @author longyin * @author 博客地址:http://blog.csdn.net...
  • u010156024
  • u010156024
  • 2015-04-04 19:54
  • 11541

JAVA获取同一路径下所有子类或接口实现类

整个测试代码如下: Java代码   package find;      import java.io.File;   import java.io....
  • z69183787
  • z69183787
  • 2016-05-04 10:06
  • 1839

获取全部子类或接口的全部实现

模拟EclipseF4快捷键设计,以期获得类的结构层次关系。即,获得一个类的所有子类,或者获得实现某一个接口的所有实现类
  • littleschemer
  • littleschemer
  • 2015-08-09 18:38
  • 5649

JAVA获取同一路径下所有子类或接口实现类

package zmx.util; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.List; ...
  • zmx729618
  • zmx729618
  • 2016-05-04 17:32
  • 2137

java 获取 泛型类型(接口及超类)

package com.wonders.xss; import com.google.gson.GsonBuilder; import com.wonders.stpt.todoItem.model.vo.TodoInfo; import java.lang.reflect.*; import ...
  • z69183787
  • z69183787
  • 2014-12-25 10:30
  • 11317

利用反射获取子类,父类,接口的信息

1.测试类:package com.example;import com.example.utils.StringUtils;import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; imp...
  • rongrong_love_lc
  • rongrong_love_lc
  • 2017-01-04 16:20
  • 2225
    个人资料
    • 访问:590306次
    • 积分:5588
    • 等级:
    • 排名:第5636名
    • 原创:102篇
    • 转载:33篇
    • 译文:0篇
    • 评论:364条
    个人简介
    我只是一个简单的Coder,为了兴趣和理想奋斗在生活的道路上
    希望大家多多交流,共同进步,有疑问或想法请留言或者私信,也可以加群:157797573

    博客专栏
    最新评论
    你还在一个人孤独的奋斗吗?
    其实,你并不寂寞,欢迎加入CSDN Java群,这里是你的另一个家!    点击加入:CSDN Java群