5

在具有 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 {
...
}

所以Logger不是,但我真的不在乎 Serializable什么时候UserData反序列化,是否有可能以Logger某种方式再次调用生产者?

编辑

最初的讨论从这里开始:

http://www.cdi-spec.org/news/2015/07/03/CDI-2_0-EDR1-released/#comment-2119769909

希望CDI专家组能想出更好的办法@Instance

4

1 回答 1

2

检查规范,你有你的答案。Logger不可序列化,因此该类型的 beanLogger不具备钝化能力。该容器不提供您要求的技巧。

解决方案是写这样的东西:

@SessionScoped
public class UserData implements Serializable {
  @Inject
  private Instance<Logger> logInstance;
  private String data;

  public Logger getLog() {
   return logInstance.get();
  }
}

Ans在您的代码中使用getLog()而不是。log

于 2015-07-06T17:07:17.893 回答