在抽象类中提供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注释该类不起作用,因为A
和D
将创建抽象类的不同实例,@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?