小编Chr*_*kin的帖子

什么时候@Dependent范围的CDI bean被销毁,如果你通过Provider.get()获得那个bean?

我很难理解@DependentCDI 1.0和CDI 1.1中作用域的有效生命周期.到目前为止,我的实验得出了以下结论:

  • 一个@Dependent作用域的bean没有代理.
  • @PreDestroy@Dependentbean被销毁时,不会调用任何方法.
  • Provider.get()总是创建一个@Dependentbean 的新实例.
  • 使用JBoss 6/CDI 1.0,@Dependent@ApplicationScopedbean的Provider<>字段创建的bean 被"泄露",因为它仍然"属于" Provider.
  • 在使用WELD 2.1.2.Final/CDI 1.1时,我没有看到@Dependent类似Providers 泄漏豆类的证据(还有!).(虽然这可能是因为这些特定的 @Dependent bean是由@Produces方法创建的......!)

我看到CDI 1.1已添加了一种destroy()方法Instance<>,可能是为了解决CDI 1.0中的内存泄漏问题.但那怎么样Provider<>- CDI 1.1中是否还会泄漏?(如果确实如此,那么你应该怎么用Provider.get()?)

基本上,我有几个@ApplicationScopedbean/@SingletonEJB,我@Inject Provider试图Provider.get()用作两者的工厂@Dependent@RequestScoped"帮助"bean.我绝对希望这些bean"属于"他们的Provider字段,因为我需要将bean随后进行垃圾收集:

public void updateStuff() {
    Helper helper = …
Run Code Online (Sandbox Code Playgroud)

java-ee cdi jboss-weld weld

10
推荐指数
1
解决办法
1万
查看次数

标签 统计

cdi ×1

java-ee ×1

jboss-weld ×1

weld ×1