Results 1 to 3 of 3

Thread: Why AOP doesn't intercept this method implementing an interface?

  1. #1
    Join Date
    Nov 2007
    Posts
    12

    Default Why AOP doesn't intercept this method implementing an interface?

    I have the Command interface:
    public interface Command<A extends Action> {
    public Response execute(A action);
    }

    The LoginCommand class:
    public class LoginCommand implements Command<LoginAction>{
    public Response execute(LoginAction action){}
    }
    LoginAction extends Action.

    The AOP config:
    <aop:config proxy-target-class="true">
    <aop:aspect id="logging" ref="loggingAspect">
    <aop:before
    pointcut="execution(* command.LoginCommand.*(..))"
    method="doBeforeCommandAccess"/>
    </aop:aspect>
    </aop:config>

    Before LoginCommand.execute(), the doBeforeCommandAccess() is not run.

    However, if I modify the LoginCommand.execute to be
    public Response execute(Action action){}
    The doBeforeCommandAccess() runs before the method.

    I am wondering when the target class implements some interface, is it required that the concrete class has the exact method signature as that in the interface? Is there any way around it? Please note, that I get the same result with or without proxy-target-class="true". So CGLIB proxy or Jdk dynamic proxy don't seem to be different in this case.

    Thank you very much.

  2. #2
    Join Date
    Nov 2007
    Posts
    12

    Default Please help!

    Could anyone please help?

    I checked out the Spring document. It says:

    If the target object to be proxied implements at least one interface then a JDK dynamic proxy will be used. All of the interfaces implemented by the target type will be proxied. CGLIB proxying is to proxy every method defined for the target object, not just those implemented by its interfaces.

    In my case, I would think
    LoginCommand implements the Command interface. (as least the Compiler says so)
    Command:
    public interface Command<A extends Action> {
    public Response execute(A action);
    }

    LoginCommand:
    public Response<String> execute(LoginAction action)

    However, JDK dynamic proxy doesn't intercept the execute method. Then I forced it to use CGLIB, it is also not intercepted.

  3. #3
    Join Date
    Nov 2007
    Posts
    12

    Default Fixed.

    My problem is fixed when I replaced with the latest 2.0.7 spring.jar. Thank you for everyone who viewed my post.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •