gpt4 book ai didi

java - 在 CDI Passivation Capable bean 中,是否可以重新注入(inject)而不是钝化不支持钝化的依赖项?

转载 作者:搜寻专家 更新时间:2023-11-01 03:20:43 24 4
gpt4 key购买 nike

在支持 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 Passivation Capable bean 中,是否可以重新注入(inject)而不是钝化不支持钝化的依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31251288/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com