Jon*_*her 5 java cdi jboss-weld openwebbeans jakarta-ee
在 CDI 钝化能力 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 {
...
}
Run Code Online (Sandbox Code Playgroud)
那么Logger是不是 Serializable,但我真的不在乎。何时UserData反序列化,是否可以以Logger某种方式再次调用生产者?
最初的讨论从这里开始:
http://www.cdi-spec.org/news/2015/07/03/CDI-2_0-EDR1-released/#comment-2119769909
希望 CDI 专家组想出比这更好的方法 @Instance
检查规格,你就有答案了。Logger不可序列化,因此 type 的 beanLogger不具备钝化能力。该容器不提供您所请求的技巧。
解决方案是写这样的东西:
@SessionScoped
public class UserData implements Serializable {
@Inject
private Instance<Logger> logInstance;
private String data;
public Logger getLog() {
return logInstance.get();
}
}
Run Code Online (Sandbox Code Playgroud)
Ans在您的代码中使用getLog()而不是。log
| 归档时间: |
|
| 查看次数: |
4087 次 |
| 最近记录: |