我在 ServletContextListener 的 contextInitialized(...)
方法中实例化的类中使用 @Resource 注释,但该成员始终为 null。这是我的示例代码。
听众:
public void contextInitialized(ServletContextEvent sce) {
System.err.println("In contextInitialised");
new ResourceListenerTargetTest().executeMe();
}
ResourceListenerTargetTest:
@Resource(name="MyJDBCResource")
private DataSource source;
public void executeMe() {
/*try {
InitialContext ictx = new InitialContext();
source = (DataSource)ictx.lookup("java:comp/env/MyJDBCResource");
} catch (NamingException e) {
e.printStackTrace();
}*/
System.err.println("source is " + source);
}
如果我切换评论并运行手动资源查找,它工作正常。
当在 contextInitalized 方法中使用时,@Resource 注释应该像这样工作吗?
Appserver 是 WAS 7.0.0.5,如果它应该 工作那么我猜这是一个错误?谁能证实一下?
最佳答案
该死的。 Bug .
Webcontainer code is initializing the servlet before injection targets are retrieved from the injection engine. As a result, if servlet initialization is dependent upon an injected resource, problems can occur.
因此,由于在加载任何 servlet 之前调用了 contextInitialized,因此必须存在相同的问题。
关于java - @Resource 注释成员未注入(inject) - 错误代码或错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2745972/