在 CDI 钝化能力 bean 中,是否可以重新注入(inject)而不是钝化非钝化能力依赖项?
考虑这个代码:
@SessionScoped
public class UserData implements Serializable {
@Inject
private Logger log;
private String data;
}
@ApplicationScoped
public class LoggerFactory {
@Produces
public Logger getLogger(){
...
}
}
public class Logger {
...
}
所以
Logger
不是 Serializable
,但我真的不在乎。当 UserData
反序列化时,是否可以以某种方式再次调用 Logger
的生产者?编辑
最初的讨论从这里开始:
http://www.cdi-spec.org/news/2015/07/03/CDI-2_0-EDR1-released/#comment-2119769909
希望 CDI 专家组提出比
@Instance
更好的方法 最佳答案
检查 spec ,你就有了答案。 Logger
不可序列化,因此 Logger
类型的 bean 不能钝化。容器不提供您要求的技巧。
解决方案是这样写:
@SessionScoped
public class UserData implements Serializable {
@Inject
private Instance<Logger> logInstance;
private String data;
public Logger getLog() {
return logInstance.get();
}
}
Ans 在您的代码中使用
getLog()
而不是 log
。关于java - 在 CDI 钝化能力 bean 中,是否可以重新注入(inject)而不是钝化非钝化能力依赖项?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31251288/