Java接口有多个实现类,按照排序调用每个实现类重写的方法

java 遍历执行某个接口的所有实现类的某个方法 需求: 一个maven过程中建立一个公共接口,它可以有多个实现类。 前端请求时,遍历此接口的所有实现类,执行其中的某个方法,从而实现动态的数据显示。 后续增加数据显示只需要添加一个jar依赖,此jar内是公共接口的实现类,会被扫描并执行。 解决: 使用到Reflections库实现包扫描(扫描某个包中某个接口实现、注解等) 依赖 <dependency> <groupId>org.reflections</groupId> <artifactId>refl 阅读详情

作为一个稀有的Java妹子,所写的所有博客都只是当作自己的笔记,留下证据自己之前是有用心学习的~哈哈哈哈(如果有不对的地方,也请大家指出,不要悄悄咪咪的不告诉我)

1、目标接口

public interface IEventDriver {

    /**
     * 触发事件
     *
     * @param event 事件
     * @return 是否冒泡, true不往下传递事件, false继续往下传递
     */
    boolean trigger(BaseEvent event);

    /**
     * 排序, 越大越有限执行
     */
    int order();
}

2、实现类

列举其中一个实现类

public class SmsEventDriver implements IEventDriver {
    @Override
    public boolean trigger(BaseEvent event) {
    	//省略实现
       	....
        //继续往下传递
        return false;
    }

   
    @Override
    public int order() {
        return Integer.MIN_VALUE;
    }
}

3、工厂类

public class DriverExecutor {
    private DriverExecutor() {
    }

    private static DriverExecutor driverExecutor = null;
    //目标接口集合,用来存放所有的实现类
    private List<IEventDriver> eventDrivers = new LinkedList<>();

    /**
     * 获取单例
     */
    public static synchronized DriverExecutor getInstance() {
        if (driverExecutor == null) {
            driverExecutor = new DriverExecutor();
            //获取目标接口的所有实现类
            Map<String, IEventDriver> driverMap = SpringUtil.getContext().getBeansOfType(IEventDriver.class);
            //这里根据接口的实现类的order字段排序
            driverExecutor.eventDrivers = driverMap.values().stream().sorted(Comparator.comparingInt(IEventDriver::order)).collect(Collectors.toList());

        }
        return driverExecutor;
    }

    /**
     * 执行所有驱动
     */
    public void execute(BaseEvent event) {
        //循环每个实现类,执行方法
        for (IEventDriver eventDriver : eventDrivers) {
            try {
                if (eventDriver.trigger(event)) {
                    return;
                }
            } catch (Exception ex) {
                log.error("事件驱动执行失败", ex);
            }

        }
    }


}
【Java】集合框架之Set接口、实现类、排序 文章目录Set接口与实现类① HashSet类(HashCode)② LinkedHashSet类(记录插入顺序)TreeSet类(二叉树-自动排序)HashSet排序的两种方法 Set接口与实现类 特点: 1)无序、无下标、元素不可重复(当插入新元素时,如果新元素与已有元素进行equals比较,结果为true时,则拒绝新元素插入) 2)set接口并没有提供自己独有的方法,均是继承Collecti... 阅读详情

相关推荐

ios生成海报使用dom-to-image中toPng报错isTrusted:true

主要是ios中safari浏览器解析错误,引起的报错,主要引起原因toPng会调用toSvg,toSvg直接将html标签内容通过svg中foreignObject标签直接包裹,然后转base64, 通过data:image/svg+xml;解决办法:二次生成(调用两次),判断ios or 安卓,生成第一次生成,不用参数,例如:scale: 3,在第二次生成再进行清晰度操作,避免多次生成,引起性能消耗。以上种种很多案例,使用canvase进行转换的,标签丢失,直接toPng版本的,兼容性问题。

weixin_44601570的博客 2105

接口多实现

接口 多实现 动态

u014365523的博客 7665

【分布式系统学习】CAP原理详解

概述:互联网最重要任务莫过于海量数据处理,即大规模分布式系统,分布式是互联网的核心技术!!!如上所述,分布式系统是无法同时满足CAP三个特性的。1.Atomicity(原子性)一个事务中的所有操作,要么全部完成,要么全部不完成,不会在中间某个环节结束。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样。2.Consistency(一致性)在事务开始之前和事务结束以后,数据库的完整性没有被破坏。3.Isolation(隔离性)

大龄烤红薯的博客 5022

一个接口多个实现类,循环执行每个实现类

一个接口多个实现类,循环执行每个实现类

程序员日志 946

MATLAB船舶开尔文尾迹三维仿真建模

开尔文尾迹介绍 Kelvin最早研究舰船在水面运动在水面上形成波纹的原理,主要针对静水中点源运动的尾迹问题,并给出尾迹的张角和波高分布情况。由 Kelvin 的理论,一般情况下假设由一个理想点源来代替舰船,开尔文尾迹由分歧波和横断波组成,分歧波向船的两侧扩散,而横断波主要向船的后方传播,在相遇的地方两波相干形成尖头波,且尖头波位于尾迹角16°到19.5°之间,又因为尖头波波长过短,以至于无法单独的区分出每个尖头波的波前,所有的波前在视觉效果上就连成一条直线表现为亮线,称为开尔文臂,开尔文臂以船身对称,且角度

qq_19512613的博客 3844

基于 Qt C++ 的 2D 动画制作工具

你可以修改它的中心坐标 (X, Y)、宽度 (W)、高度 (H),或点击 "选择颜色" 按钮改变其填充色。* **图形视图 (`QGraphicsView` 和 `QGraphicsScene`)**: 用于显示和编辑当前帧的内容。

寒寒豆豆软件公司的博客 111

java一个接口多个实现得调用

需要根据具体的应用场景和需求选择适合的方式来调用不同的实现类。在代码中,根据接口类型、条件判断、集合遍历或动态获取实例等方式,可以灵活地调用不同的实现类的方法。

yuanchengfu0910的博客 9952

图数据库Neo4j面试内容整理-Neo4j的性能

在执行复杂关系查询时,Neo4j 通过图结构的高效存储和查询机制,能够比传统的关系型数据库提供更快的性能,尤其是在涉及深层关系的查询时。通过合理的配置、优化查询和使用合适的硬件,Neo4j 可以处理大规模的数据集和高并发的查询请求,满足企业级应用的需求。Neo4j 在处理图数据时,通过优化图的存储、查询和遍历等方面,提供了高效的性能,特别适合用于需要处理复杂关系和多层次连接的应用场景,如社交网络、推荐系统、知识图谱等。:Neo4j 会根据查询的结构和数据的分布自动选择最优的查询计划。

不务正业的猿 585

java中同时使用extends ,implements顺序问题

interface A { void fa(); } class C implements A{ void fa() {...} } 假如现在有类D,它需要实现接口A,也要继承类C, 当把extends放在前面,则类D会先继承C,再实现接口A,那么就不用再去实现fa()了,即 class D extends C implements A{ } 若将extends 放在implements后面,那就要实现fa()方法了,但又继承类C,类c中也可fa()方法,此时就会出现问题 ...

qq_52570190的博客 3854

Linux C/C++ or 嵌入式面试之《C/C++笔面试系列》(10) C++ 前置后置增减运算符重载形式与比较

C语言的++、–运算符在此不讨论。 文章目录1、前置后置增减运算符重载的形式2、前置和后置运算符的性能比较 1、前置后置增减运算符重载的形式 自增运算符“++”和自减运算符“–”分别包含两个版本。即运算符前置形式(如 ++x)和运算符后置形式(如 x++),这两者进行的操作是不一样的。因此,当我们在对这两个运算符进行重载时,就必须区分前置和后置形式。C++根据参数的个数来区分前置和后置形式。如果按照通常的方法来重载 ++ 运算符(即作为成员函数重载时不带参数,或者作为非成员函数重载时带有一个参数),那么重载

二进制君 5829

第1课:开篇扫盲——OpenClaw是什么?能帮你解决什么问题?(入门必看)

核心目标:学会安装、卸载、管理OpenClaw技能,自定义AI代理的性格与权限,让AI贴合自己的使用习惯。核心内容技能市场详解:ClawHub市场核心技能分类(办公、学习、开发、生活),热门技能推荐(web-search、文件处理、邮件管理)[superscript:3][superscript:4]。技能安装与卸载:终端命令实操(openclaw skill install/uninstall),技能更新与版本管理[superscript:3]。

从零开始,掌握网络安全。提供全面的网络安全教程、攻防演练技巧和行业动态。 1754

普通java类(排序)实现Comparable接口重写CompareTo方法

普通的类要实现排序,必须实现Comparable接口,并重写CompareTo()方法。 package test;public class Field implements Comparabl

wangchaoqi1985的博客 6263

生成EtherCAT从站XML图片信息方法

详细介绍了EtherCAT从站XML文件中图片元素的生成方法。

kevin1499的博客 2127

Java重写compareTo方法的原理分析和具体实现

原理分析 当我们想排序一个自定义的数组,Java又没有直接提供它们的比较方式时。我们可以通过实现接口Comparable并重写compareTo()方法来添加对自定义数组的比较,然后通过Arrays的sort()方法来将这个数组排序。有些同学就要问了:为什么重写了compareTo()方法就可以通过Arrays.sort()来进行排序了,我们可以通过源码来解释: 我们从源码可以看到调用Arr...

wjc_hbu的博客 2万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java Set接口的实现类TreeSet 自然排序 定制排序

java Set接口的实现类TreeSet 自然排序 定制排序1.TreeSet 自然排序2.TreeSet 定制排序 1.TreeSet 自然排序 TreeSet 会调用集合元素的 compareTo(Object obj) 方法来比较元素之间的大小关系,然后将集合元素按升序排列 如果试图把一个对象添加到 TreeSet 时,则该对象的类必须实现 Comparable 接口。 实现 Compa...

码农回顾 1631

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Java对象数组按照其属性排序的方法

问题描述: 开发时我们希望用一个类表示某种物品, 用其域来描述物品的特性,  当我们有一组物品也就是一个对象数组时,我们会希望这组物品按照它的某个属性来排序 也就是需要对象数组按照其属性排序 一 类定义时实现Comparable接口,定义自身的比较算法。 要排序就要有比较的方法, 因为是自定义的类, 系统不知道怎么做两个自定义类的比较, 所以我们要自己在类内写两个类的比较的方法,也就是...

nO0b 9146

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java 重写compareTo方法实现类自定义排序

废话不多说,贴上代码!!! package com.xxxxxx.xxxxxx.xxxxxx; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Person implements Comparable<Person> { priv...

qq_37517574的博客 3477

java中重写排序

这个东西上实验课老是忘,还是记一下吧。 class node { int u, v, w; } class MyComparator implements Comparator { public int compare(Object arg0, Object arg1) { node a = (node) arg0; node b = (node) arg1; if (a.w...

bravo的博客 1181

Java按照类中某一属性排序

前言: 我们知道C++中可以很轻松的根据结构体中的某一元素进行排序,但同样的问题到Java中该怎样实现呢?怎么根据Java中某一个类的某一个属性进行排序呢。有两种方法,一种是实现Comparable接口,另一种是构造比较器,我认为实现Comparable接口相对简单易懂,所以我决定记录这种方法。 我们以学生作为例子,学生类里有姓名,年龄,成绩几个属性,首先我们要根据成绩排名,在成绩相同的情况下,...

weixin_43421663的博客 3556

Java Set接口及其实现类

Set接口:set存储元素是无序不可以重复的,元素是否重复是依据元素自身equals比较进行判定的。 Set接口有两个实现类: 散列集合:HashSet(Hash算法) 树集合:TreeSet(二叉树算法) 因为set接口也是Collection的子接口,所以也可以使用Collection实现的所有方法,其中常用的有: 添加:add() 删除:remove() 检查元素是否存在:contains(Object o) 迭代器:iterator() 1、TreeSet:树状集合、存放有序 语法:Set&

单枪匹码 869

Java入门集合之Set集合(重写equals()和hashcode()方法)

概述 Set接口继承Collection Set接口常用实现类 HashSet 实现了 Set 接口 “它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变”(存入该实现类对象中的元素是无序的,即在遍历该集合元素时,遍历出的元素顺序未必和向集合中添加元素的顺序一致;这次遍历出来的顺序未必和上一次遍历出来的元素顺序一致) 允许使用 null 元素 LinkedHashSet HashSe...

wang_da_bing的博客 1万+

Java Map接口的常见实现类

HashMap 概述 HashMap 是Map 的子类,此类的定义如下: public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable ​ 此类继承了AbstractMap 类,同时可以被克隆,可以被序列化下来。 特点 HashMap是 Map 接口使用频率最高的实现类。 允许使用

程序员小章的博客 4951

java 重写compareTo方法实现类排序

class expert implements Comparable { private int age; public expert(int age) { this.age = age; } public int getAge() { return age; } public void setA

u014698430的博客 6735

如何对List集合按照对象的某一属性排序

在进行软件构造实验三的过程中,遇到了对List集合按照对象的某一属性排序的问题,我们知道,在一般的情况下,java中提供了对集合进行操作的工具类Collections, Collections能够对集合中的元素用默认的排序方法sort来根据元素的自然顺序对指定集合按升序进行排序。 对于常用的java自带的类: 在java中,很多类自己实现好了Comparable接口,并且重写了comepareTo方法,所以我们可以直接调用方法就可以实现排序。我们拿Integer类来举例子: import java.ut

飞了一半的涛的博客 5666

【Java】重写compareTo()方法给对象数组排序

这里定义了一个Student数组,数组大小为4,也就是说数组中有4个学生,然后分别实例化了4个学生,把他们的名字年龄和成绩都输入了进去,现在我们想以年龄或成绩进行排序,那应该怎么实现呢,还是用Arrays.sort()方法吗?我们进入这个第二行报的错,显示源码中第320行报错:源码中这几段代码的意思是取到数组中的某个值,把这个值转化为了一个Comparable类型(这个Comparable是一个接口),然后调用一个compareTo()方法。当我们把这个数组进行排序时,报错了,报了一个类型转换异常。

weixin_63257947的博客 2098

java 实体类重写排序_java对实体进行排序Comparator

通过实体的属性对多个实体进行排序(刚学习完面向对象,写的接口并没有用到,只是为了让**试着写一写接口):/*** @comment:学生信息类* @author 傅里叶级数* @date 2018年10月22日下午2:18:14*/public class Student {private String name;private int age;private int height;private...

weixin_33669611的博客 763
上一篇: Java8特性:lambda表达式
下一篇: Spring 注解:@Async
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值