我们有一个系统,我们希望在一个单独的jar中使用我们的接口实现。该场景是客户端使用我们的工作并提供自己的实现来覆盖默认实现。
问题是将实际实现类绑定/连接到系统的最佳方法是什么?
一种方法是让spring连接依赖项。它目前不是一个选项,因为所有客户都没有使用spring。
研究了一些选项,比如使用反射解析接口实现类。对此解决方案不太满意。
另一个不错的旧选项是在其中一个属性中配置类名,让客户端对其进行配置。看起来不错。
但是想要找到一些优雅的选择。
还有任何想法SLF4J / EL如何自动解决他们的实现?
答案 0 :(得分:1)
我建议您使用SPI (Service Provider Interface)。 它需要创建枚举特定服务的所有可用实现的文件。这可能很烦人。幸运的是,您可以使用这个为您工作的开源库:http://code.google.com/p/spi/
答案 1 :(得分:0)
也许Reflections库正是您要找的。 p>
Reflections会扫描您的类路径,索引元数据,允许您在运行时查询它,并可以保存和收集项目中许多模块的信息。
使用思考可以查询元数据,例如:
- 获取某种类型的所有子类型
- 获取所有带注释的类型/方法/字段,没有匹配的注释参数
- 获取与正则表达式匹配的所有资源