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

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

场景:MyServiceImpl1 和 MyServiceImpl2 都实现了 MyService接口

@Service
public class MyServiceImpl1 implements MyService {
    @Override
    public Type getType() {
        return Type.ONE;
    }
    // ...
}
@Service
public class MyServiceImpl2 implements MyService {
    @Override
    public Type getType() {
        return Type.TWO;
    }
    // ...
}复制代码

方式1,通过set注入

@Component
public class InitializeTest {
    private static Map<Type, MyService> myServiceMap = new LinkedHashMap<>();
    @Autowired(required = false)
    public void setMyServices(List<MyService> services) {
        myServiceMap.clear();
        for (MyService service : services) {
            myServiceMap.put(service.getType(), service);
        }
    }
    public static MyService getMyServiceByType(Type type) {
        return myServiceMap.get(type);
    }
}复制代码

方式2, 通过反射获取同一包下的,都实现了MyService接口的实现类

@Component
public class MyCommandRunner implements CommandLineRunner {
    @Autowired
    private ApplicationContext applicationContext;
    private static Map<Type, MyService> myServiceMap = new LinkedHashMap<>();
    @Override
    public void run(String... args) {
        // MyCommandRunner 与实现了MyService接口的实现类位于同一包下
        Reflections reflections = new Reflections(this.getClass().getPackage().getName());
        Set<Class<? extends MyService>> myClasses = reflections.getSubTypesOf(MyService.class);
        for (Class<? extends MyService> myClass : myClasses) {
            MyService myService = applicationContext.getBean(monitor);
            myServiceMap.put(myService.getType(), myService);
        }
    }
    public static MyService getMyServiceByType(Type type) {
        return myServiceMap.get(type);
    }
}
复制代码


目录
相关文章
|
22小时前
|
SQL Java 数据库连接
15:MyBatis对象关系与映射结构-Java Spring
15:MyBatis对象关系与映射结构-Java Spring
12 4
|
22小时前
|
网络协议 Java
Java中如何使用Socket类检测端口是否存在
Java中如何使用Socket类检测端口是否存在
12 4
|
22小时前
|
存储 缓存 前端开发
Java串口通信技术探究3:RXTX库线程 优化系统性能的SerialPortEventListener类
Java串口通信技术探究3:RXTX库线程 优化系统性能的SerialPortEventListener类
9 3
|
23小时前
|
存储 Java
Java的`java.io`包包含多种输入输出类
Java的`java.io`包包含多种输入输出类。此示例展示如何使用`FileInputStream`从`input.txt`读取数据。首先创建`FileInputStream`对象,接着分配一个`byte`数组存储流中的数据。通过`read()`方法读取数据,然后将字节数组转换为字符串打印。最后关闭输入流释放资源。`InputStream`是抽象类,此处使用其子类`FileInputStream`。其他子类如`ByteArrayInputStream`、`ObjectInputStream`和`BufferedInputStream`各有特定用途。
7 1
|
2天前
|
存储 Java
java IO接口(Input)用法
【5月更文挑战第1天】Java的`java.io`包包含多种输入输出类。此示例展示了如何使用`FileInputStream`从`input.txt`读取数据。首先创建`FileInputStream`对象,接着创建一个字节数组存储读取的数据,调用`read()`方法将文件内容填充至数组。然后将字节数组转换为字符串并打印,最后关闭输入流。注意,`InputStream`是抽象类,此处使用其子类`FileInputStream`。其他子类如`ByteArrayInputStream`、`ObjectInputStream`和`BufferedInputStream`各有特定用途。
9 2
|
2天前
|
NoSQL Java API
java一行代码实现RESTFul接口
Spring Data REST是构建在Spring Data之上的库,可自动将repository转换为REST服务,支持JPA、MongoDB、Neo4j、GemFire和Cassandra。无需手动创建Service和Controller层。要开始,需配置JPA数据源,创建实体类和Repository接口。快速实现REST接口,只需引入spring-boot-starter-data-rest Maven依赖,并在Repository接口上添加@RepositoryRestResource注解。
|
2天前
|
Java 开发者
Java中三种Set的实现类的用法和区别
Java中三种Set的实现类的用法和区别
|
2月前
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
6月前
|
Java
Java集合框架“List“
Java集合框架“List“
47 1
|
7月前
|
安全 Java
【面试】Java集合中List,Set以及Map等集合体系详解
【面试】Java集合中List,Set以及Map等集合体系详解
32 0