@Inject字段始终为null

我尝试@Inject一个字段(它是一个jar模块,空的beans.xml存在于META-INF下),如下所示:

IDataProvider接口

public interface IDataProvider { void test(); } 

DataProvider实现导入javax.enterprise.context.ApplicationScoped;

 @ApplicationScoped public class DataProvider implements IDataProvider { private int i; public DataProvider() { i = 42; } @Override public void test() { } } 

我尝试注入DataProvider的类

 import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; @ApplicationScoped public class DataController { @Inject private IDataProvider dataProvider; private int k; public DataController() { k = 42; } } 

如果我在Wildfly上运行它,注入的dataProvider总是为null(DataController构造函数的断点)。

在每个教程上都是这样做的,所以我认为这应该有用。 唯一的区别是两个类都应该是@ApplicationScoped

我正在使用Wildfly 8.2Final,Gradle,IntelliJ。 我的gradle.build看起来像这样:

 apply plugin: 'java' repositories { mavenCentral() jcenter() } dependencies { compile group:'javax', name:'javaee-web-api', version:'7.+' compile group:'org.jboss.ejb3', name:'jboss-ejb3-ext-api', version:'2.+' } sourceSets { main { java { srcDir 'src/api/java' srcDir 'src/main/java' } } test { java { srcDir 'src/test/java' } } } jar { from ('./src') { include 'META-INF/beans.xml' } } 

有谁知道为什么这不起作用? 我没有从Wildfly得到任何错误或exception。

在构造DataControllerdataProvider是正常的。 之后注射发生。

您应该添加@PostConstruct方法来检查字段的无效性:

 @PostConstruct void init() { // dataProvider should not be null here. } 

另外,Weld的错误报告已经做得很好。 因此,如果注入失败,您应该有一个明确而详细的错误消息,而不仅仅是一个空字段。