我们有一个问题,我们有一个带有注释 ( @Resource
) 的超类,而扩展该超类的子类是无状态 bean。
与此非常相似,如果超类和子类在同一个模块中,则资源注入成功。如果它们位于单独的模块中,则不会注入资源 - 似乎未处理注释。
我已经通过反射验证了注释在类上是“看到的”,但是当我进入时ResourceInjectionAnnotationParsingProcessor
,@Resource
注释不会显示在从其他模块继承的类上(尽管它确实显示在同一模块中的类上)。
我看到的常见解决方案是jandex
文件和设置annotations="true"
,但这似乎是针对静态模块,而不是其他部署,例如我们的案例。
另一个建议是模块可能缺少对注释的依赖,但在我的示例中,所有涉及的模块都依赖于<module name="javax.annotation.api"/>
.
有没有其他方法可以使这些注释从单独的部署中“可见”?
作为一个最小的例子,如果你有一个超类
import javax.annotation.Resource;
import javax.ejb.SessionContext;
public class BaseResource {
@Resource
private SessionContext sessionContext;
public String getContext() {
return "Context is " + sessionContext;
}
}
和一个子类
import javax.ejb.Stateless;
@Stateless
public class ResourceBean extends BaseResource {
public ResourceBean() {
System.out.println(getClass().getName() + " created");
}
}
如果它们在同一个模块中,SessionContext
则会显示 。在单独的模块中,SessionContext
总是null
.