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
-~----------~----~----~----~------~----~------~--~---