新しいポスターは、私はブレーキ任意のルール:)GoogleのGuiceの、インターセプタとPrivateModulesここ
私は同じ環境のために複数のデータソースのを持っているために、グーグル、Guiceの中PrivateModuleを使用していますがないことを望みます。しかし私は、MethodInterceptorをプライベートモジュールの内部で動作させるのに苦労しています。 以下は "問題"を説明する簡単なテストケースです。
シンプルなサービスクラスは次のようになります。
interface Service {
String go();
}
class ServiceImpl implements Service {
@Override @Transactional
public String go() {
return "Test Case...";
}
}
MyModule
クラスは次のようになります。あなたがへの出力を期待
public class TestCase {
@Inject Service service;
public TestCase() {
Guice.createInjector(new MyModule()).injectMembers(this);
}
public String go() {
return service.go();
}
public static void main(String[] args) {
TestCase t = new TestCase();
System.out.println(t.go());
}
}
:
class MyModule extends AbstractModule {
@Override
protected void configure() {
install(new PrivateModule() {
@Override
protected void configure() {
bind(Service.class).to(ServiceImpl.class);
bindInterceptor(
Matchers.any(),
Matchers.annotatedWith(Transactional.class),
new MethodInterceptor() {
@Override
public Object invoke(MethodInvocation i)
throws Throwable {
System.out.println("Intercepting: "
+ i.getMethod().getName());
return i.proceed();
}
});
expose(Service.class);
}
});
}
}
、最終的なテストケースbe:
しかし、それは起こらない、インターセプターは使用されていません、唯一のTest Case...
が出力されます。
インターフェイスの代わりにServiceImpl
をバインドまたは公開すると機能します。事前に
おかげで、 よろしく、 LL
ませthat'tを十分でない、あなたはまた、結合を公開する必要があります。 – luislobo
あなたはそれを縛るだけです。それをプライベートモジュールから公開する必要はありません(プライベートモジュールのポイントをいくらか打ち負かします)。 –