Guiceバインディングで前後のフックを実装する方法はありますか? たとえば、Guice がコンストラクターを呼び出してメソッドに注入されるインスタンスを取得する前に、インスタンスが既にどこかに存在するかどうかのロジック チェックを提供できますか。インスタンスが見つかった場合は、コンストラクターを呼び出さずに直接返します。反対に、インスタンスが Guice バインディング プロセスで構築されると、元の呼び出し元に戻る前にそのインスタンスを処理するロジックを挿入できますか?
質問する
367 次
1 に答える
1
カスタムTypelistenerを使用するとうまくいくはずです。私が理解していることから、あなたの問題は「postConstruct」の問題に似ており、guice がインスタンスを作成している間にインスタンスのコードを実行しています。少し前に書いたこの(ドイツ語の) ブログ記事が、あなたを正しい方向へと向かわせているのかもしれません。
- Matcher を使用して、リスナーが反応するインスタンスを定義します。
afterInjection フックを使用してインスタンスを操作する
@Override public void configure(final Binder バインダー) {binder.bindListener(Matchers.any(), this); }
@Override パブリック ボイド ヒア(最終的な TypeLiteral 型、最終的な TypeEncounter の遭遇) { 遭遇.register(新しい InjectionListener() {
@Override public void afterInjection(final I injectee) { // alle postconstruct Methoden (nie null) ausführen. for (final Method postConstructMethod : filter(asList(injectee.getClass().getMethods()), MethodPredicate.VALID_POSTCONSTRUCT)) { try { postConstructMethod.invoke(injectee); } catch (final Exception e) { throw new RuntimeException(format("@PostConstruct %s", postConstructMethod), e); } } } });
}
于 2016-02-23T08:47:01.070 に答える