【问题标题】:Unable to access proxy object in Spring AOPSpring AOP 无法访问代理对象
【发布时间】:2015-04-01 21:34:58
【问题描述】:

这个问题可能有点简单,但我就是找不到解决方案。 我正在使用 Spring AOP,目前我只是想获取对框架本身创建的代理对象的引用。 我按照this 线程提供的说明进行操作,但仍然出现以下异常:

线程“main”java.lang.IllegalStateException 中的异常:找不到当前代理:建议将“exposeProxy”属性设置为“true”以使其可用。

这是我的 springContext.xml 中所需的条目:

 <aop:aspectj-autoproxy expose-proxy="true"/>

这是我的方面定义:

@Aspect
public class DynamicAspect {


@Pointcut("execution(* addition.aop.Actor.play(..))")
public void play() {

}

@Before("play()")
public void directorGivesInstructions() {
    System.out.println("Director: Light, camera, action!");
}

测试一切的主要方法:

public static void main(String[] args) {    
 ApplicationContext context = new ClassPathXmlApplicationContext(...);
 Actor actor = (Actor) context.getBean("actor");
 actor.play();
}

这是 Actor 类中引发异常的方法:

 public void play() {
    AopContext.currentProxy();
    System.out.println("Actor starts playing his role...");
}

切面被编织并正确调用。

非常感谢!

【问题讨论】:

    标签: spring spring-aop


    【解决方案1】:

    最后我自己发现了错误。上面的代码工作正常。但是,将编译器从 ajc 换成 javac,我认识到代理说明只能使用 javac 而不是 AspectJ 编译器进行编译。我希望这对你们中的一些人有所帮助!

    【讨论】: