假设我有一个第三方类如下:
public class MyObject {
@Inject
public MyObject(Foo foo, Bar bar) { ... }
}
现在假设我有一个这样的工厂接口:
public interface MyObjectFactory {
public MyObject build(Bar bar);
}
这个想法是我希望有一个为一个固定的MyObjectFactory
构建一个- 也就是说,本质上是从外部在构造函数参数上添加注释。当然,手动实现总是可行的:MyObject
Foo
@Assisted
Bar
MyObjectFactory
public class MyObjectFactoryImpl implements MyObjectFactory {
@Inject private Provider<Foo> foo;
@Override
public MyObject build(Bar bar) { return new MyObject(foo.get(), bar); }
}
但是假设有一些条件需要我让 Guice 构建MyObject
实例——例如,方法拦截器。这似乎是“注入注射器”的工作:
public class MyObjectFactoryImpl implements MyObjectFactory {
@Inject private Injector injector;
@Override
public MyObject build(Bar bar) {
Injector child = injector.createChildInjector(new AbstractModule() {
@Override
protected void configure() {
bind(Bar.class).toInstance(bar);
// Set up method interceptors for MyObject here...
}
});
return child.getInstance(MyObject.class);
}
}
这听起来很邪恶和样板,所以我想知道是否有任何替代实现和/或让 Guice 生成工厂 impl 的方法。