2016-02-21 103 views
0

在Guice綁定中有沒有一種方法來實現鉤子之前和之後的類型?例如。在Guice調用構造函數以將實例注入方法之前,我可以提供邏輯檢查,如果實例已經存在某處,如果我可以找到該實例,則直接返回它而不調用構造函數;另一方面,一旦在Guice綁定過程中構建了一個實例,我可以注入邏輯來處理該實例,然後再返回給原始調用方?在Guice綁定過程中注入自定義邏輯

+0

你也許可以使用這是一個'Provider',更高級的情況下可能需要一個'ProvisionListener'。 –

回答

1

使用自定義Typelistener應該做的伎倆。從我的理解你的問題類似於「postConstruct」問題,當guice創建它時執行一個實例的代碼。也許this(德國)博客文章寫了一段時間前推動你在正確的方向。

  1. 使用匹配器來定義偵聽器應在哪些實例上作出反應。
  2. 使用再噴射鉤與實例

    @Override 公共無效配置(最終粘合劑粘合劑){ binder.bindListener(Matchers.any(),這一點)工作; }

    @覆蓋 公共無效聽到(最終TypeLiteral類型,最終TypeEncounter遭遇){ encounter.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); 
          } 
         } 
        } 
    }); 
    

    }

+0

感謝您的回覆。PostConstruct是我的第二選擇,我真正想要的是劫持施工過程並替換construc與我自己的工廠打電話。它是否可行? –

+0

我不知道如何。當然,使用提供者會給你自由。 –