从静态方法调用AOPContext.currentProxy()

时间:2012-08-29 14:39:18

标签: spring spring-mvc spring-aop

我在@service类实现中使用Spring的AOPContext.currentProxy()。但是,我在静态方法中使用它,我做了类似

的操作
public static void addCustomer() {
    //....

    ((CustomerService) AopContext.currentProxy()).addCustomer();

    //...

但是,我收到错误 - “找不到代理”将expose-proxy设置为true。

使用静态方法出现这种错误的原因是什么?

注意:“ addCustomer ”方法也是静态的

提前致谢。

3 个答案:

答案 0 :(得分:3)

在创建实例时注入代理配置。假设使用此代理创建的实例,您调用方法AOP适用于该方法。假设没有代理实例或使用类名(在静态的情况下),你调用方法是直接调用代理配置没有注入实例,所以AOP不适用于该方法调用。

答案 1 :(得分:1)

我不确定你要做什么,但你不能这样做。

static方法的调用在编译时解析,因此它们不受基于代理的AOP的影响。换句话说:

  • AopContext.currentProxy()在静态方法中没有意义(除非你想获得一个代理来封闭一些实例方法的调用),因为静态方法的调用没有被代理
  • AopContext.currentProxy()返回的实例上调用静态方法没有意义,因为它在编译时使用静态类型的表达式解析,即它编译为CustomerService.addCustomer()

答案 2 :(得分:0)

您的配置是否包含<aop:config expose-proxy="true" />

之类的内容