cdi构造函数注入ejb

Cdi constructor injection ejb

我下载了 intelliJ,它给了我一个建议,将我的注入放在构造函数中。但是,在按照他们的建议进行操作时,我收到另一条建议消息,告诉我我需要一个空的构造函数。所以我想知道实现这样的东西的最佳方法是什么:

这只是 jsf 应用程序中的后台任务,每分钟 运行。

@Singleton
public class MatchesBgService implements Serializable {
    @Inject //intelliJmessage : Hey, you should use constructor injection
    private MatchLookup ml;
    @Inject
    private MatchTask bgTask;

    public MatchesBgService(){
        comparator = new MatchComparator();
    }

    @Schedule(hour = "*", minute = "*/1", second = "20", persistent = false)
    public void gettingMatches() {

您的代码可能如下所示:

@Singleton
public class MatchesBgService implements Serializable {

    private final MatchLookup ml;
    private final MatchTask bgTask;

    @Inject
    public MatchesBgService(MatchLookup ml, MatchTask bgTask){
        this.ml = ml;
        this.bgTask = bgTask;

        // ...
    }
}

解惑:

  1. 在任何有意义的地方使用构造函数注入被认为是一种很好的做法。
  2. CDI 规范说您需要一个默认的空构造函数(以便 class 可代理)。
    但幸运的是,至少 Weld 不需要它 - 所以我上面的代码将 工作正常。

这就是 IntelliJ 为您提供这些建议的原因。
干杯