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;
// ...
}
}
解惑:
- 在任何有意义的地方使用构造函数注入被认为是一种很好的做法。
- CDI 规范说您需要一个默认的空构造函数(以便 class 可代理)。
但幸运的是,至少 Weld 不需要它 - 所以我上面的代码将
工作正常。
这就是 IntelliJ 为您提供这些建议的原因。
干杯
我下载了 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;
// ...
}
}
解惑:
- 在任何有意义的地方使用构造函数注入被认为是一种很好的做法。
- CDI 规范说您需要一个默认的空构造函数(以便 class 可代理)。
但幸运的是,至少 Weld 不需要它 - 所以我上面的代码将 工作正常。
这就是 IntelliJ 为您提供这些建议的原因。
干杯