我有带依赖关系的MethodInterceptor。我怎么能注射它们?
Here,在2007年,Bob Lee说这种可能性应该包含在下一个版本中,但是我找不到这个API。
bindInterceptor
方法需要实例而不是类。
答案 0 :(得分:12)
来自Guice FAQ:
为了在AOP MethodInterceptor中注入依赖项,请在标准bindInterceptor()调用旁边使用requestInjection()
。
public class NotOnWeekendsModule extends AbstractModule {
protected void configure() {
MethodInterceptor interceptor = new WeekendBlocker();
requestInjection(interceptor);
bindInterceptor(any(), annotatedWith(NotOnWeekends.class), interceptor);
}
}
另一个选择是使用Binder.getProvider
并在拦截器的构造函数中传递依赖项。
public class NotOnWeekendsModule extends AbstractModule {
protected void configure() {
bindInterceptor(any(),
annotatedWith(NotOnWeekends.class),
new WeekendBlocker(getProvider(Calendar.class)));
}
}