在CDI Passivation Capable bean中,是否可以重新注入非钝化能力的依赖性而不是钝化?
考虑以下代码:
@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
答案 0 :(得分:2)
检查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
。