Jesse and I were just talking about this the other day. We want to support it with the full set of error checking that Guice provides for in-the-club instances, and there are some gotchas. So it's not as simple as just making it work (for example, what happens when a recursive method is called). I think we came up with a good solution, that keeps things consistent and gives you the same level of up-front checking but it will take some time to implement.
Dhanji. On Tue, Jun 9, 2009 at 4:18 AM, Alen Vrecko <[email protected]> wrote: > > Well, the way guice handles aop it is not possible for aop elements to > come into a live instance(created via new). That is why using provider > with new doesn't work. > > But you're right, aop elements sure can be added. One good thing about > Guice is that it extends easily. You can write a custom provider that > does aop on live instances for you. Something like this > http://pastie.org/505566 > and do > > bind(Foo.class).toProvider(FooProvider.class); > > public static class FooProvider extends AopProxingProvider<Foo> { > public Foo getPlain() { > return new Foo(); > } > } > > Maybe there is a better way. The code is just a suggestion. > > Cheers > Alen > > On Jun 9, 9:26 am, uud ashr <[email protected]> wrote: > > Why AOP element can't get in? > > Guice has provider and call Object instance = someProvider.get(), guice > has > > the instance. > > > > On spring I can do this. > > > > import org.aopalliance.intercept.MethodInterceptor; > > > > import org.aopalliance.intercept.MethodInvocation; > > > > import org.springframework.aop.framework.ProxyFactory; > > > > public class Hello { > > > > public void hello() { > > > > System.out.println("Hello"); > > > > } > > > > public static void main(String[] args) { > > > > Hello hello = new Hello(); > > > > ProxyFactory pf = new ProxyFactory(hello); > > > > pf.addAdvice(new MethodInterceptor() { > > > > public Object invoke(MethodInvocation invocation) > throwsThrowable { > > > > if (invocation.getMethod().getName().equals("hello")) { > > > > System.out.println("Intercepting hello"); > > > > } > > > > Object retVal = invocation.proceed(); > > > > return retVal; > > > > } > > > > }); > > > > Hello proxyHello = (Hello)pf.getProxy(); > > > > proxyHello.hello(); > > > > } > > > > } > > > > See. I think we can implement this on Guice. Is it possible? I haven't > check > > the source code yet, but I think this is possible. > > > > On Fri, May 22, 2009 at 2:29 AM, Alen Vrecko <[email protected]> > wrote: > > > > > 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 -~----------~----~----~----~------~----~------~--~---
