在大多数情况下,我有很多组件具有要由 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
}
}
我想将 setterServiceC
和方法移动executeSomethingDependendOnServiceC()
到抽象类。但是它在 OSGi 中与 Bnd 注释的关系如何。只是用@Component 注释类是行不通的,因为A
并且D
会创建抽象类的不同实例,而@Component 也正在创建一个实例。
也许有人遇到同样的问题,并给我一些建议,解决方法可能是什么样子。至少一个最佳实践解决方案也可以:)