JBoss Weld:根据上下文切换注入的实例,并在几个bean中注入实例

时间:2012-02-10 13:57:14

标签: java jboss-weld

我有一个对象,我想注入几个不同类型的对象。该对象必须相同:

class A {}
class B {@Inject A a;} 
class C {@Inject A a;}
class D {@Inject A a;}

A实例a必须在B,C,D类型的对象之间共享。

此外,我需要能够在这些对象中切换A的实例,而不会破坏它。我甚至需要能够将A的所有实例保存在容器中。 A的每个实例都与文档相关,我的应用程序应该能够处理n个文档(不是在同一时间,但应该能够在它们之间切换)。当用户选择另一个文档时,A的相应实例应该替换B,C,D实例中的前一个。

使用JBoss Weld有一种简单的方法吗?

我有另一种解决方案的想法(使用单例管理器对文档选择做出反应,并在需要的地方替换A的实例),但我发现这个解决方案并不干净。也许我错了......

1 个答案:

答案 0 :(得分:0)

我发现的解决方案是使用Manager而不是直接使用A,例如:

class A {}
class AManager{A currentA;}
class B {@Inject AManager manager;} 
class C {@Inject AManager manager;}
class D {@Inject AManager manager;}

并在管理器中切换currentA,具体取决于上下文。