[英]Providing DI methods in abstract classes
在大多数情况下,我有很多组件具有由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
的设置器和方法executeSomethingDependendOnServiceC()
移到抽象类。 但是在OSGi中与Bnd注释相关的情况如何。 只是用@Component注释类是行不通的,因为A
和D
将创建抽象类的不同实例,而@Component也将创建实例。
也许有人遇到了同样的问题,并给了我一些解决方法的建议。 至少一个最佳实践解决方案也是可以的:)
DS批注必须在要为该组件实例化的类上。 不支持超类的注释。 有建议在将来的规范版本中进行更改。
您可以做的是将方法移到超类,但是您将需要在子类中平凡地重写该方法,以便可以在子类中对其进行注释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.