Я искал по всему Интернету, и все (в том числе) google предлагает использовать requestInjection()
, но я до сих пор не понимаю, как его использовать. У меня есть класс, который реализует метод Interceptor:Перехватчики метода ввода в Guice
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);
}
}
Так в основном, я хочу, чтобы впрыснуть localStore, remoteStore и cacheUtils в моем MethodInterceptor с моей собственной реализацией наметило в моих 3-х модулей , Но это не сработало. Наверное, меня просто смущает requestInjection(). В документации requestInjection делает это
После успешного создания Инжектор будет вводить поля экземпляра и методы данного объекта.
Но где мы указываем сопоставление между интерфейсом и классом реализации? Как я могу получить то, что я хотел сделать, чтобы работать?
Так будет ли это работать с сеттерами? Просто проверил его, и он работает для сеттеров! Спасибо @condit –