删除后调用SFSB

时间:2012-06-13 06:47:57

标签: java-ee java-ee-6 cdi jboss7.x jboss-weld

我正在开发一个应用程序,其中几个SFSB都实现了相同的接口。

要在运行时确定要使用的具体实现,我有以下工厂方法:

@SuppressWarnings("rawtypes")
@Inject @Any Instance<SFSBInterface> sfsbSource;

public <T> SFSBInterface<T> initBeanForm(Class<T> clazz, Class<? extends SFSBInterface<T>> sfsbClass, Annotation... qualifiers) {
    SFSBInterface<T> sfsb = sfsbSource.select(sfsbClass, qualifiers).get();
    return sfsb;
}

每个具体实现都实现了@Remove注释方法。现在我有一个案例,我想删除这个sfsb并在调用这个方法时得到一个新实例。

我正在调用remove方法并删除对该对象的所有引用,但实例仍然在内存中。当我现在要求这个类的一个实例时,我得到的是同一个实例,之前我调用了remove。

我的问题是:

  1. 如果我使用这个实例,我会遇到问题吗? 删除方法?
  2. 删除的实例保持不变是否正常 记忆?
  3. 如何有效删除此实例?
  4. 我如何获得 我班上真正的新实例?
  5. 亲切的问候 基督教

    BTW:我正在使用JBoss 7.1.1和Weld

1 个答案:

答案 0 :(得分:0)

  

当我现在要求这个班级的一个实例时,我也是如此   例如,之前我调用了删除。

我会说这种行为超出了规范,因此非常依赖于供应商。可以从旧实例池中获取新bean(这似乎就是这种情况)或新创建的。这个策略可以(理论上)随着app-server的新版本而改变,更糟糕的是:从环境到环境。

一个核心问题是你如何确定它是一个“新实例”?

我认为如果你能和它一起生活就不容易回答。

下一步应该做的是检查新bean的生命周期钩子。如果一切都被调用并且所有依赖项都被正确注入,那么看起来相当不错恕我直言

否则随时更新问题:)