精华内容
下载资源
问答
  • Java动态获取实现某个接口下所有的实现类对象集合发布时间:2020-09-03 04:56:45来源:脚本之家阅读:155作者:执笔记忆的空白最近有个需求,我需要获取所有同一类型的定时任务的对象,并自动执行。我想的方案是:...

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

    发布时间:2020-09-03 04:56:45

    来源:脚本之家

    阅读:155

    作者:执笔记忆的空白

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

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

    开始想着用反射自己写一个工具类,后面懒得去折腾,就直接用第三方工具包了,这里我用的是org.reflections。

    maven配置:

    org.reflections

    reflections-spring

    ${reflections.version}

    javassist

    javassist

    我这里去除javassist包是因为单独引入了javassist其他版本

    另外就是代码引用了,以DelayedBaseMonitor接口为例:

    List monitorLists = new ArrayList<>();

    Reflections reflections = new Reflections(delayedFindPackageName);

    Set> monitorClasses = reflections.getSubTypesOf(DelayedBaseMonitor.class);

    for (Class extends DelayedBaseMonitor> monitor : monitorClasses) {

    monitorLists.add(ApplicationContext.getBean(monitor));

    }

    这里我用了Spring的ApplicationContext去获取bean,这样能获取这些实现类里面其他spring注入的bean。如果是简单方式的话,你们可以直接通过

    monitor.getNewInstance来实现

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对亿速云的支持。如果你想了解更多相关内容请查看下面相关链接

    展开全文
  • 1.结论 ... 当Java抽象类实现某个接口后没必要实现所有的方法。3.注意点    当Java普通类实现接口后必须实现接口中的所有方法。4.原因为什么抽象类不需要实现所有方法?    &...
    1.结论

        并不是所有的类实现接口后都必须实现接口的所有方法!

    2.特殊情况

        当Java抽象类实现某个接口后没必要实现所有的方法。

    3.注意点

        当Java普通类实现接口后必须实现接口中的所有方法。

    4.原因

    • 为什么抽象类不需要实现所有方法?

             因为抽象类本身是具有抽象性的,它的方法也大多不需要进行实现,只需要声明,其他实现的过程多交给继承它的子类。而接口本身就更为抽象的一种形式,所以如果让一个本来抽象的类去实现一个更为抽象的接口的所有方法是没有必要的,除非对于抽象类本身而言需要接口的一些方法来完善自身。而没有实现的其他方法完全可以交给它的派生类去实现

    • 为什么普通类需要实现所有方法?

            普通类中的所有方法都需要有方法体,即使是空方法。当一个普通类实现了一个接口后就必须要实现其所有的方法,如果有任何一个方法没有实现,在类向接口向上转型的时候就会因为丢失数据(因为此时普通类中没有接口的完整数据)导致转型失败,这样显然是不允许的。

    5.同时使用抽象类和接口有什么好处?

          如果一个普通类想要实现接口的某些方法,此时需要借助抽象类,可以让抽象类先实现接口中的部分方法,然后普通类通过继承抽象类后再去实现自己需要的接口中的方法。


    展开全文
  • 今天小编就为大家分享一篇关于Java动态获取实现某个接口下所有的实现类对象集合,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 关键在于: applicationContext.getBeansOfType(ChartService.class);... 获得Map对象的key为实现类的名称如:chartSimpleServiceImpl 获得Map对象的value为实现类对象如:com.read.data.cms.service.impl.Char...

    关键在于: applicationContext.getBeansOfType(ChartService.class);

                      获得Map对象的key为实现类的名称如:chartSimpleServiceImpl

                      获得Map对象的value为实现类对象如: com.read.data.cms.service.impl.ChartExtraServiceImpl@5c85b6e9

    applicationContext的获取方法有很多种,我这里暂列两种

    第一种方式实现接口所有类集合(注解)

    @Autowire
    private ApplicationContext applicationContext;
    
    
    Map<String,ChartService> res = applicationContext.getBeansOfType(ChartService.class);
    res.get("实现类的字符串如:chartSimpleServiceImpl")
    res.get获得的结果,就是当前实现类对象

    第二种方式实现接口所有类集合(实现接口)

    /**
     * @author: tianyong
     * @Time: 2019/6/26 11:17
     * @description:服务工厂(主要用于动态注入接口实现类)
     */
    @Component
    public class ServiceFactory implements ApplicationContextAware {
    
    
        //定义成员变量
        private static Map<String,ChartService> res;
    
    
        /**
          * @author: tianyong
          * @time: 2019/6/27 16:04
          * @description:设置上下文参数
          */
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            res = applicationContext.getBeansOfType(ChartService.class);
        }
    
    
        /**
          * @author: tianyong
          * @time: 2019/6/27 16:05
          * @description:根据标记返回当前接口实现类
          */
        public static <T extends ChartService> T getServices(String flag){
            return (T)res.get(flag);
        }
    
    
    
    }
    

    如果对您有帮助,麻烦关注本人公众号:周三想吧

    展开全文
  • 我想的方案是:直接获取某个接口下面所有的实现类的对象集合,方便以后只需要 实现这个接口,就能自动被加载执行。话不多说,说说我的实现方案。开始想着用反射自己写一个工具类,后面懒得去折腾,就直接用第三方...

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

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

    开始想着用反射自己写一个工具类,后面懒得去折腾,就直接用第三方工具包了,这里我用的是org.reflections。

    maven配置:

    org.reflections

    reflections-spring

    ${reflections.version}

    javassist

    javassist

    我这里去除javassist包是因为单独引入了javassist其他版本

    另外就是代码引用了,以DelayedBaseMonitor接口为例:

    List monitorLists = new ArrayList<>();

    Reflections reflections = new Reflections(delayedFindPackageName);

    Set> monitorClasses = reflections.getSubTypesOf(DelayedBaseMonitor.class);

    for (Class extends DelayedBaseMonitor> monitor : monitorClasses) {

    monitorLists.add(ApplicationContext.getBean(monitor));

    }

    这里我用了Spring的ApplicationContext去获取bean,这样能获取这些实现类里面其他spring注入的bean。如果是简单方式的话,你们可以直接通过

    monitor.getNewInstance来实现

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

    展开全文
  • 我想的方案是:直接获取某个接口下面所有的实现类的对象集合,方便以后只需要 实现这个接口,就能自动被加载执行。话不多说,说说我的实现方案。开始想着用反射自己写一个工具类,后面懒得去折腾,就直接用第三方...
  • Java中,一个类实现某个接口,必须重写接口中的所有方法吗?“Java中,一个类实现了某接口,则必须实现该接口中的所有方法么?”这句话其实是不准确的,因为我们还没有考虑到抽象类。抽象类实现某个接口,可以不实现...
  • Java中,一个非抽象类实现了某接口,则必须实现该接口中的所有方法。 而抽象类实现某个接口,可以不实现所有接口的方法,可以由它的子类实现。
  • 还是一样,我在写日志框架时遇到的问题,获取一个接口的所有实现类,但是我发现反射API中并没有或者实现类的API。无奈,只能自己动了。老样子,先上代码,后上教程:/*** 获取一个接口的所有实现类** @param target* @...
  • 我想的方案是:直接获取某个接口下面所有的实现类的对象集合,方便以后只需要 实现这个接口,就能自动被加载执行。话不多说,说说我的实现方案。开始想着用反射自己写一个工具类,后面懒得去折腾,就直接用第三方...
  • 我想的方案是:直接获取某个接口下面所有的实现类的对象集合,方便以后只需要 实现这个接口,就能自动被加载执行。话不多说,说说我的实现方案。 开始想着用反射自己写一个工具类,后面懒得去折腾,就直接用第三方...
  • java中,一个类实现某个接口,必须重写接口中的所有方法吗? 不一定,关键要看子类是否是抽象类。 如果子类是非抽象类,则必须实现接口中的所有方法;  如果子类是抽象类,则可以不实现接口中的所有方法,因为抽象...
  • 我想的方案是:直接获取某个接口下面所有的实现类的对象集合,方便以后只需要 实现这个接口,就能自动被加载执行。话不多说,说说我的实现方案。开始想着用反射自己写一个工具类,后面懒得去折腾,就直接用第三方...
  • 现在要写一个 AlarmDoor 类,该类继承 Door 类,并实现 Alarm 接口。那么又如何在 AlarmDoor 类中将 Alarm 的 open 方法和 Door 的 open 方法进行区别。 [b]问题补充:[/b] 我要对 Door 和 Alarm 只能使用,不能修改...
  • 我想的方案是:直接获取某个接口下面所有的实现类的对象集合,方便以后只需要 实现这个接口,就能自动被加载执行。话不多说,说说我的实现方案。开始想着用反射自己写一个工具类,后面懒得去折腾,就直接用第三方...
  • java中,一个类实现某个接口,必须重写接口中的所有方法吗???  java编程语言 专业回答 程秀娟 IT行业金牌讲师 北大青鸟中关村校区学术部 2015-09-29 10:30 不一定,关键要看子类是否是抽象...
  • 这篇文章主要介绍了Java基础教程之实现接口,也可以说是实施接口,因为接口只是定义,最终要实现它,本文就专门讲解接口实现,需要的朋友可以参考下在封装与接口中,private关键字封装了对象的内部成员。经过封装,产品...
  • 通过反射实现获取某个接口的所有实现类,前提是这些实现类需要在同一个包中。 1.定义接口 package com.lm.validate public interface IDataValidator{ boolean validate(String str); } 2.
  • 如果子类是非抽象类,则必须实现接口中的所有方法;如果子类是抽象类,则可以不实现接口中的所有方法,因为抽象类中允许有抽象方法的存在!1、抽象类定义抽象类往往用来表征对问题领域进行分析、设计中得出的抽象...
  • 如果子类是非抽象类,则必须实现接口中的所有方法;如果子类是抽象类,则可以不实现接口中的所有方法,因为抽象类中允许有抽象方法的存在!1、抽象类定义抽象类往往用来表征对问题领域进行分析、设计中得出的抽象...
  • java中,一个类实现某个接口,必须重写接口中的所有方法吗? 不一定,关键要看子类是否是抽象类。 如果子类是非抽象类,则必须实现接口中的所有方法;  如果子类是抽象类,则可以不实现接口中的所有方法,因为抽象...
  • 如果子类是非抽象类,则必须实现接口中的所有方法;如果子类是抽象类,则可以不实现接口中的所有方法,因为抽象类中允许有抽象方法的存在!1、抽象类定义抽象类往往用来表征对问题领域进行分析、设计中得出的抽象...
  • Java实现Runnable接口创建多线程

    千次阅读 2018-04-15 23:14:18
    Java实现Runnable接口创建多线程 通过继承Thread类,实现多线程,但是,这种方式有一定的局限性,因为,Java中只支持单继承,一个类一旦继承了某个父类,就无法再继承Thread类 比如,学生类Student继承了Person类...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,926
精华内容 1,970
热门标签
关键字:

java实现某个接口

java 订阅