Cdi构造函数注入ejb

时间:2016-06-01 18:55:18

标签: java dependency-injection cdi

我下载了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() {

1 个答案:

答案 0 :(得分:1)

您的代码可能如下所示:

@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规范说你需要一个默认的空构造函数(让类可代理) 但幸运的是,至少Weld并不需要它 - 所以我的上述代码会 工作得很好。
  3. 这就是IntelliJ为您提供这些建议的原因 干杯