当前位置: 首页 > 面试题库 >

@Inject字段始终为空

廉鸿运
2023-03-14
问题内容

我尝试@Inject这样的字段(它是一个jar模块,在META-INF下存在空bean.xml):

IDataProvider接口

public interface IDataProvider {
  void test();
}

数据提供者实现import 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得到任何错误或异常。


问题答案:

在构建期间DataController,通常dataProvider为null。之后进行注射。

您应该添加一种@PostConstruct方法来检查该字段是否为空:

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

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



 类似资料:
  • 我上传文件有问题。我使用kartik-v/yii2小部件文件输入扩展。这是我的代码: 表单模型规则 窗体视图 控制器动作 当我提交表单时,总是出现错误“需要图像字段”。我已经阅读了很多教程,但在使用ajax验证时仍然存在同样的问题。有人能看看它,告诉我我做错了什么吗?

  • 问题内容: 遇到这个问题(有点烦人),我正在尝试查找集合中的所有记录,而不显示(或显示)特定字段(得分)。这只是一个示例,并不能反映我的实际代码,但是问题总是可以重现的。我要排除的字段非常大,我只是试图生成可用记录的菜单。 像这样的命令 始终返回每个字段,而不是触发mongodb中的排除/包含。我不需要担心什么,因为模板可以控制哪些数据呈现为html?仍然感觉无论如何数据都已传输到客户端。并显示在

  • 下面是片段。请注意,我已经恢复到以前的提交,因此丢失了最近的修改,但请查看我编写的代码,然后才注意到始终等于0() 以下是当检测到活动后按: 以下是NoteActivity接收结果调用的方式。 null 我在我的项目上浪费了很多重要的时间,只是想知道是什么使resultCode和requestCode的值丢失了我发送的值。 任何帮助和指导都将不胜感激。非常感谢!

  • 我在CDI条件注射中遇到了问题,无法在EJB的注射中使用一种策略。 我的实际情况是: 好吧,场景解释了。现在的问题是,我需要得到的值从返回一个,我的所必需的。但是此时有些Bean还没有被CDI注射。 我怎样才能让这条线起作用? 使用基于另一个注入的属性值的限定符动态注入bean的正确方法是什么?

  • 请注意,以下操作符合预期: 有人帮我吗?

  • 我正在与golang一起使用gRPC。我有一个非常简单的原型定义和一个gRPC服务。proto定义中有一个类型为google/protobuf/any的字段。gRPC服务无法将此字段映射到输入值,它总是被初始化为零 原型定义: 利用此功能,可以实现一个简单的gRPC服务: 输入数据: 客户: 对于未知类型,谷歌/原型/任何类型应该如何Unmarshal? 抛出错误:s:"not find"