【发布时间】:2011-09-13 08:57:51
【问题描述】:
我有一种情况,我需要使用 Guice 3.0 来实例化我的对象,但其中一个值可能会随着每个实例而改变。我无法绑定该值的类型,并且在需要创建实例之前我不会知道。
例如:
public class Foo {
public Foo(Bar bar, Baz baz) {...}
}
我希望 Guice 注入 Bar 参数,但在需要 Foo 之前我不会知道 Baz。该值也不是特定于范围的(例如 RequestScope)。
我希望这个对象被 Guice 完全实例化的全部原因是因为我需要方法拦截。在 Guice 中,“手动构建的实例不参与 AOP”。
我尝试使用 Provider<Foo> 执行此操作,但这只允许我使用 public Foo get() { ... }。
必须为Baz 的每个可能值创建一个提供程序将是一场配置噩梦,所以我不能简单地在 FooProvider 的构造函数中定义Baz。
我觉得我在这里遗漏了一些基本的东西。也许是因为这是我星期五要做的最后一件事。任何想法将不胜感激。
编辑:以下使用“辅助注射”的答案似乎只有在您能够编辑Foo 的来源时才有效。 Foo 在某些情况下实际上可能超出我的控制范围。如果我自己创建实例(即实现我自己的工厂),那么 Guice-AOP 方法拦截器似乎永远不会知道该对象。
【问题讨论】:
标签: java aop guice factory-pattern