动态解决API的实现

时间:2012-08-30 15:40:11

标签: java

我们有一个系统,我们希望在一个单独的jar中使用我们的接口实现。该场景是客户端使用我们的工作并提供自己的实现来覆盖默认实现。

问题是将实际实现类绑定/连接到系统的最佳方法是什么?

一种方法是让spring连接依赖项。它目前不是一个选项,因为所有客户都没有使用spring。

研究了一些选项,比如使用反射解析接口实现类。对此解决方案不太满意。

另一个不错的旧选项是在其中一个属性中配置类名,让客户端对其进行配置。看起来不错。

但是想要找到一些优雅的选择。

还有任何想法SLF4J / EL如何自动解决他们的实现?

2 个答案:

答案 0 :(得分:1)

我建议您使用SPI (Service Provider Interface)。 它需要创建枚举特定服务的所有可用实现的文件。这可能很烦人。幸运的是,您可以使用这个为您工作的开源库:http://code.google.com/p/spi/

答案 1 :(得分:0)

也许Reflections库正是您要找的。

  

Reflections会扫描您的类路径,索引元数据,允许您在运行时查询它,并可以保存和收集项目中许多模块的信息。

     

使用思考可以查询元数据,例如:

     
      
  • 获取某种类型的所有子类型
  •   
  • 获取所有带注释的类型/方法/字段,没有匹配的注释参数
  •   
  • 获取与正则表达式匹配的所有资源
  •