我正在开发一个应用程序,其中几个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。
我的问题是:
亲切的问候 基督教
BTW:我正在使用JBoss 7.1.1和Weld
答案 0 :(得分:0)
当我现在要求这个班级的一个实例时,我也是如此 例如,之前我调用了删除。
我会说这种行为超出了规范,因此非常依赖于供应商。可以从旧实例池中获取新bean(这似乎就是这种情况)或新创建的。这个策略可以(理论上)随着app-server的新版本而改变,更糟糕的是:从环境到环境。
一个核心问题是你如何确定它是一个“新实例”?
我认为如果你能和它一起生活就不容易回答。
下一步应该做的是检查新bean的生命周期钩子。如果一切都被调用并且所有依赖项都被正确注入,那么看起来相当不错恕我直言
否则随时更新问题:)