我已经在网上搜索了它,所有人(包括)google建议使用requestInjection()
,但我仍然不了解如何使用它。我有一个实现Method Interceptor的类:
public class CacheInterceptor implements MethodInterceptor {
private ILocalStore localStore;
private IRemoteStore remoteStore;
private CacheUtils cacheUtils;
public CacheInterceptor() {
}
@Inject
public CacheInterceptor(ILocalStore localStore, CacheUtils cacheUtils, IRemoteStore remoteStore) {
this.localStore = localStore;
this.cacheUtils = cacheUtils;
this.remoteStore = remoteStore;
}
}
我有3个课程延伸AbstractModule
。
public class CacheUtilModule extends AbstractModule {
@Override
protected void configure() {
bind(CacheUtils.class);
}
}
public class LocalCachingModule extends AbstractModule {
@Override
public void configure() {
bind(ILocalStore.class).to(LocalStore.class);
}
}
public class RedisCachingModule extends AbstractModule {
@Override
protected void configure() {
bind(IRemoteStore.class).to(RemoteStore.class);
}
}
我为绑定拦截器
做了以下操作public class RequestScopedCachingModule extends AbstractModule {
@Override
public void configure() {
install(new CacheUtilModule());
install(new LocalCachingModule());
install(new RedisCachingModule());
MethodInterceptor interceptor = new CacheInterceptor();
requestInjection(interceptor);
bindInterceptor(Matchers.any(), Matchers.annotatedWith(Cacheable.class),
interceptor);
}
}
基本上,我想在我的MethodInterceptor中注入localStore,remoteStore和cacheUtils,并在我的3个模块中映射出我自己的实现。但这并没有奏效。我想我只是对requestInjection()感到困惑。在文档中,requestInjection执行此操作
成功创建后,Injector将注入给定对象的实例字段和方法。
但是我们在哪里指定接口和实现类之间的映射?我怎样才能得到我想做的工作?
答案 0 :(得分:1)
requestInjection
只会注入字段和方法 - 它不会调用构造函数,也不会对构造函数上的@Inject
注释有任何了解。如果您将@Inject
添加到所有字段,则代码应按预期运行。