是否可以在不定义自定义注释的情况下,使用基于注入点计算的构造函数/工厂参数执行自定义注入?
给定一个代码:
class Foo {
public Foo() {}
public Foo(java.lang.reflect.Field field) {}
}
class Bar {
@javax.inject.Inject Foo foo;
}
如何在不修改Bar
的情况下配置guide以使用Foo
的第二个构造函数(传递目标字段)。
我知道guice可以使用标准的@Inject对java.util.logging.Logger进行自定义注入,但这似乎是硬编码的,并且使用内部api。
您可以使用注入提供程序来完成此操作。请参阅https://code.google.com/p/google-guice/wiki/ProviderBindings和https://code.google.com/p/google-guice/wiki/ProvidesMethods.你只需要告诉Guice在绑定对象时如何实例化它
例如,在我的一个项目中,我尝试了这个:
public static class CalendarServiceProvider implements Provider<CalendarService> {
@Inject
GAppsOAuth oauth;
private GCalendarService service;
@Override
public CalendarService get() {
if (service == null) {
service = new GCalendarService(oauth);
}
return service;
}
}
我不知道这是否是你想要的,但我希望它会有所帮助。
如果只想使用特定的构造函数,可以使用构造函数绑定:
bind(Foo.class).toConstructor(Foo.class.getConstructor(java.lang.reflect.Field.class));
如果你需要更复杂的东西,你必须使用自定义注射。