在抽象类中提供DI方法

在大多数情况下,我有很多组件都有相同的类被OSGi声明服务注入。 这些服务将用于执行一些逻辑,这对所有派生组件都是相同的。 因此,为避免重复代码,最好使用抽象类。 是否有可能将DI参考方法(set / unset)移动到抽象类中。 我正在使用Bnd。

例如:

@Component 
public class B implements IA {
   private ServiceC sc;

   @Reference
   public void setServiceC(ServiceC sc) {
      this.sc = sc;
   }  

   public void execute() {
      String result = executeSomethingDependendOnServiceC();

      // do something with result
   }

   protected String executeSomethingDependendOnServiceC() {
      // execute some logic
   }     
}

@Component 
public class D implements IA {
   private ServiceC sc;

   @Reference
   public void setServiceC(ServiceC sc) {
      this.sc = sc;
   } 

   public void execute() {
      String result = executeSomethingDependendOnServiceC();

      // do something different with result
   }

   protected String executeSomethingDependendOnServiceC() {
      // execute some logic
   }      
}

我想将ServiceC executeSomethingDependendOnServiceC()的setter和方法executeSomethingDependendOnServiceC()移到一个抽象类中。 但是它在OSGi中与Bnd注释相关的形式如何。 只需使用@Component注释该类不起作用,因为AD将创建抽象类的不同实例,@Component也会创建实例。

也许有人遇到同样的问题,并给我一些建议如何解决方案可能看起来像。 至少一个最佳实践解决方案将会很好:)


DS注释必须位于为组件实例化的类上。 不支持超类的注释。 有一个建议在未来的规格版本中进行更改。

你可以做的是将方法移动到超类,但是你需要简单地重写子类中的方法,以便可以在子类中对它进行注释。

链接地址: http://www.djcxy.com/p/63533.html

上一篇: Providing DI methods in abstract classes

下一篇: Twitter API: How to get users ID, who favorite specific tweet?