Guice のインターセプトバインドで、private メソッドをインターセプトができないのは
あたり前だと理解できるけど、protected メソッドはインターセプトできるのですね。
例えば、@Transaction アノテーションが着いた protected メソッド でも以下を
com.google.inject.Module の configure メソッドで以下のようにして
protected メソッドはインターセプトできます。
Injector injector = ...(省略)...
@Override
protected void configure(){
binder().bindInterceptor(Matchers.any()
, Matchers.annotatedWith(Transaction.class)
, injector.getInstance(TransactionExecutor.class)
);
}
本当は、java.util.concurrent.Callable 実装で
call() の中で呼び出す privaete メソッドをインターセプトしたかったのですが、
隠蔽化して、java.util.concurrent.ExecutorService の submit で
java.util.concurrent.Future として、call()の実行時に、
callの中から呼ぶ private メソッドをインターセプトしたかったのですが、
callの中から呼ぶメソッドを protected まで、引き上げてうまくいきました。
Guice は、private 変数にインジェクトできるのに。。。