gpt4 book ai didi

java - 调用抽象类@Activate方法(apache felix)

转载 作者:行者123 更新时间:2023-12-01 04:16:03 24 4
gpt4 key购买 nike

我有一个子类扩展的抽象类。我的抽象类有一个 @Activate 方法,子类也有。当 OSGi 创建我的服务时,它会调用子类的 activate 方法,但不会调用抽象类的 activate 方法。有没有办法强制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!”。

最初我认为子激活方法名称可能会破坏同名的抽象激活方法。即使抽象类的 activate 方法被赋予唯一的名称,结果也是相同的。有什么方法可以让 OSGi 为我调用抽象类的 activate 方法吗?

最佳答案

DS注释处理器只查看用@Component修饰的具体类。不检查 super 类。由于注释处理是在构建时完成的,因此父类(super class)型可能来自导入的包,直到运行时才选择这些包。

此外,注释处理器还根据注释生成组件描述 XML。因此,XML 中只能有一个 activate="methodName"属性。如果需要调用父类(super class)的方法,则需要从子类的方法中调用它。

关于java - 调用抽象类@Activate方法(apache felix),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19436799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com