我有一个具有这种结构的项目:
WEB-INF/
WEB-INF/beans.xml
WEB-INF/classes/myclass.class
WEB-INF/lib/mylib.jar
|
+-----> com/libclass1.class
+-----> com/libclass2.class
+-----> META-INF/beans.xml
CDI在WAR(myclass.class
)内的类中工作正常,但@Inject
中来自@Resource
或mylib.jar
的任何声明都返回null。我将beans.xml
放在两个文件中,但它继续返回null,我在这个配置上缺少什么?有什么想法吗?
我正在尝试注入此资源:
@javax.annotation.Resource
UserTransaction tx;
但是,如果我使用这段代码:
private UserTransaction tx;
public UserTransaction getTx() {
if (tx == null) {
try {
tx = (UserTransaction) new InitialContext().lookup("java:comp/UserTransaction");
} catch (NamingException e) {
e.printStackTrace();
}
}
return tx;
}
然后它从Jar Classes开始工作。此代码有效,因为它正在检索预定义Bean ,但我正在尝试使@Resource/@Inject
与任何其他资源/类一起使用。
答案 0 :(得分:0)
正如评论讨论中所见,您只是在实例化您的课程:
libclass1 lC = new libclass1();
使用这种方法,CDI容器不知道类实例化,也无法为您注入依赖项。 你要做的是: