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);
    }
}
复制代码


目录
相关文章
|
4天前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
23 3
|
2月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
160 57
|
11天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
14天前
|
数据采集 JSON Java
利用Java获取京东SKU接口指南
本文介绍如何使用Java通过京东API获取商品SKU信息。首先,需注册京东开放平台账号并创建应用以获取AppKey和AppSecret。接着,查阅API文档了解调用方法。明确商品ID后,构建请求参数并通过HTTP客户端发送请求。最后,解析返回的JSON数据提取SKU信息。注意遵守API调用频率限制及数据保护法规。此方法适用于电商平台及其他数据获取场景。
|
19天前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
46 6
|
21天前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
37 5
|
2月前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
44 4
|
2月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
65 8
|
2月前
|
Java API
Java中内置的函数式接口
Java中内置的函数式接口
27 2
|
2月前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
125 1