2011-04-16 172 views
4

我有MethodInterceptor與依賴關係。我怎麼注入它們?MethodInterceptor中的依賴注入

Here,在2007年,Bob Lee說這種可能性應該包含在下一個版本中,但是我找不到API。 bindInterceptor方法需要實例而不是類。

+1

你看到this.http://code.google.com/p/google-guice/issues/detail ID = 88 – 2011-04-16 09:12:08

+1

他們正在談論生根粉樣品here.http://code.google .com/p/google-guice/wiki/AOP#Injecting_Interceptors – 2011-04-16 09:13:14

+0

@ doc_180,我播種它。但是我錯過了'requestInjection'。非常感謝。請將它作爲答案發布。 – 2011-04-16 09:17:43

回答

10

Guice FAQ

爲了注入依賴於AOP的MethodInterceptor,使用requestInjection()沿着標準bindInterceptor()調用。

public class NotOnWeekendsModule extends AbstractModule { 
    protected void configure() { 
    MethodInterceptor interceptor = new WeekendBlocker(); 
    requestInjection(interceptor); 
    bindInterceptor(any(), annotatedWith(NotOnWeekends.class), interceptor); 
    } 
} 

另一種選擇是使用Binder.getProvider並在攔截器的構造函數中傳遞依賴。

public class NotOnWeekendsModule extends AbstractModule { 
    protected void configure() { 
    bindInterceptor(any(), 
     annotatedWith(NotOnWeekends.class), 
     new WeekendBlocker(getProvider(Calendar.class))); 
    } 
} 
+0

如果'WeekendBlocker'在構造函數中有'@ Inject',我們該怎麼做?理想情況下,我想要一個'newInstance(WeekendBlocker.class)'方法,其中WeekendBlocker之前使用bind(WeekendBlocker.class)綁定。 – joscarsson 2013-06-10 07:46:36