如何检查类是否依赖于CDI创建实例?

问题描述 投票:0回答:1

如何检查类是否需要CDI注入来创建实例?

例如,

public class Foo {

    @Inject
    private Bar bar;

    // constructor/setter method can have @Inject
}

如果类依赖于CDI,但CDI不可用,则不应创建任何实例。是否有标准的CDI API来检查类是否依赖于CDI?

用例是用户可以注册侦听器类。如果侦听器类依赖于CDI,但CDI不可用,则该侦听器将被忽略。

java dependency-injection cdi
1个回答
0
投票

我将很快回答您的问题,但是依赖项注入的部分原因是注释(例如@Inject)不应影响类的设计。

如果您有这样的课程:

public class Foo {
  private final Bar bar;
  @Inject
  public Foo(final Bar bar) {
    super();
    this.bar = bar;
  }
}

…然后you创建FooCDI创建Foo,对创建Foo的方式没有影响。在两种情况下都使用相同的API(相同的构造函数)。

当您谈论private场注入时,事情当然有点奇怪,像这样:

public class Foo {
  @Inject
  private Bar bar;
  public Foo() {
    super();
  }
}

这是(按照书面说明)在没有反射技巧的情况下无法创建它的类。当然,这正是CDI实现的功能。

所以所有这些都是在说您在问其他问题。我只是不确定那是什么。

按照您的要求回答问题:

确定给定的CDI实现是否“知道”给定类的一种方法是执行类似这样的操作:

final Instance<YourClass> yourClassInstances = CDI.current().select(YourClass.class);
if (yourClassInstances.isUnsatisified()) {
  // CDI for whatever reason can't create a YourClass instance; maybe this is
  // sort of what you want?
} else {
  // CDI "knows about" your class; actually trying to get an instance might
  // result in ambiguity
}
© www.soinside.com 2019 - 2024. All rights reserved.