【发布时间】:2012-09-04 01:47:56
【问题描述】:
在大多数情况下,我有很多组件具有相同的类,由 OSGi 声明式服务注入。这些服务将用于执行一些对所有派生组件都相同的逻辑。因此,为避免重复代码,最好使用抽象类。是否有可能将 DI 引用方法(设置/取消设置)移动到抽象类。我正在使用 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 的setter 和executeSomethingDependendOnServiceC() 方法移动到一个抽象类。但是它在与 Bnd 注释相关的 OSGi 中看起来如何。仅仅用@Component 注释类是行不通的,因为A 和D 会创建抽象类的不同实例,而@Component 也在创建一个实例。
也许有人遇到同样的问题,并给我一些建议,解决方法可能是什么样的。至少一个最佳实践解决方案也可以:)
【问题讨论】: