【发布时间】:2013-10-26 12:54:43
【问题描述】:
我有一个子类扩展的抽象类。我的抽象类有一个@Activate 方法,子类也有。当 OSGi 创建我的服务时,它会调用子类的激活方法,但不会调用抽象类的激活方法。有没有办法强制OSGi调用抽象类的activate,而不是让子类手动调用父activate方法?
这里有一些代码可以帮助详细说明我的要求。
@Component(componentAbstract=true, inherit=true)
@Service(value=ISomeInterface)
public abstract class AbstractHello implements ISomeInterface{
@Activate
public void activate(){
System.out.print("Hello ");
}
}
@Component
@Service(Value=ISomeInterface)
public class World extends AbstractHello{
@Activate
public void activate(){
System.out.println("World!");
}
}
以上代码的结果将是“World!”,而不是“Hello World!”。
最初我认为可能是子激活方法名称破坏了同名的抽象激活方法。即使抽象类的激活方法被赋予一个唯一的名称,结果也是一样的。有什么方法可以让 OSGi 为我调用抽象类的 activate 方法?
【问题讨论】:
-
如果以不同的方式命名方法以使子类不会覆盖父类会发生什么?
-
@SotiriosDelimanolis 更改抽象类的激活方法名称无效。尽管有激活注释,它仍然没有被 OSGi 调用。
标签: java osgi abstract-class apache-felix