In order for AOP to work Guice needs to create the instance itself i.e. it must not be created with new. Guice will not just use constructor on ServiceImpl class but it will first create a new subclass of ServiceImpl that has the AOP elements in it and use the constructor on this subclass. But if you create it with new ServiceImpl () there is no way AOP "elements" can get in.
Cheers, Alen On May 21, 2:58 pm, "[email protected]" <[email protected]> wrote: > Hello, > > I just tried to use a MethodInterceptor with a Provider-Method binding > but the method interceptor gets not applied. > > When I use the "normal" binding style: bind(Service.class).to > (ServiceImpl.class); > the inteceptor gets applied. > > Am I doing something wrong here? > > package de.tutorials; > > import java.util.Arrays; > > import org.aopalliance.intercept.MethodInterceptor; > import org.aopalliance.intercept.MethodInvocation; > > import com.google.inject.AbstractModule; > import com.google.inject.Guice; > import com.google.inject.Injector; > import com.google.inject.Module; > import com.google.inject.Provides; > import com.google.inject.matcher.Matchers; > > public class InterceptorIsNotAppliedToProviderMethodBinding { > > public static void main(String[] args) { > Injector injector = Guice.createInjector(modules()); > Service service = injector.getInstance(Service.class); > service.service(); > > } > > private static Iterable<Module> modules() { > return Arrays.<Module>asList( > // interceptorIsApplied() > // , > interceptorIsNotApplied() > ); > } > > private static Module interceptorIsApplied() { > return new AbstractModule(){ > protected void configure() { > bind(Service.class).to(ServiceImpl.class); > > bindInterceptor(Matchers.subclassesOf(Service.class), Matchers.any > (), tracingInterceptor()); > } > > }; > } > > private static Module interceptorIsNotApplied() { > return new AbstractModule(){ > > @SuppressWarnings("unused") > @Provides Service services(){ > return new ServiceImpl(); > } > > @Override > protected void configure() { > > bindInterceptor(Matchers.subclassesOf(Service.class), Matchers.any > (), tracingInterceptor()); > } > }; > } > > protected static MethodInterceptor tracingInterceptor() { > return new MethodInterceptor(){ > @Override > public Object invoke(MethodInvocation > methodInvocation) throws > Throwable { > System.out.println("About to execute: " + > methodInvocation.getMethod()); > return methodInvocation.proceed(); > } > }; > } > > static interface Service{ > void service(); > } > > static class ServiceImpl implements Service{ > public void service() { > System.out.println("service"); > } > } > > } > > Best regards, > Thomas --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "google-guice" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/google-guice?hl=en -~----------~----~----~----~------~----~------~--~---
