2016-08-30 68 views
2

我想在JBOSS上的一个非常简单的例子。@Inject不工作的CDI bean

我有下面的类定义

import javax.annotation.PostConstruct; 
import javax.ejb.Singleton; 
import javax.ejb.Startup; 
import javax.inject.Inject; 

@Singleton 
@Startup 
public class PRCConnectionRunner { 

@Inject 
private PRCConfiguration prcConfiguration; 

@PostConstruct 
void printthing() { 
    System.out.println("HI"); 

    System.out.println(prcConfiguration== null); 
} 

} 


public class PRCConfiguration { 
public String greet(String name) { 
     return "Hello, " + name + "."; 
    } 
} 

我在WEB-INF目录中定义我的beans.xml,我这个包装从行家的战争。

但是,当我部署并在JBOSS服务器上启动它时,我确实得到了HI打印,但依赖项没有被注入,因为我对null测试的结果为true。 我在做什么错? 我相信自@PostConstruct方法被调用我缺少一些小细节。

+0

什么版本的JBoss?你有一个web.xml文件吗?如果是这样,那么指定哪个版本? –

+0

Saad

回答

0

从CDI 1.1中不是每个班级都由CDI上下文管理。您必须通过注释或将bean-discovery-mode="ALL"指定在您的beans.xml中,然后在不应由CDI管理的课程上使用@Vetoed。默认值是bean-discovery-mode="ANNOTATED"。 我的建议是用适当的注释来注释你的类(取决于bean的生命周期)。

还要检查,如果你的bean.xml文件位于.. \ web应用\ WEB-INF \ beans.xml中

Default CDI Enablement in Java EE 7

+0

尝试过,没有工作: ( – Saad

0

我解决它。问题是beans.xml存储在不正确的位置。

beans.xml应该始终处于Web应用程序的状态。

的src \主\ web应用\ WEB-INF \ beans.xml中

如果你使用Eclipse/JBoss的,快速的方法是只检查是否部署的资源菜单填充beans.xml中。当我将它放在正确的位置时,jboss会自动更新已部署的资源菜单项。

enter image description here