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

Spring 从静态方法调用AOPContext.currentProxy(),spring,spring-mvc,spring-aop,Spring,Spring Mvc,Spring Aop,我正在@service类实现中使用Spring的AOPContext.currentProxy()。然而,我在一个静态的方法中使用它,我做了如下的事情 public static void addCustomer() { //.... ((CustomerService) AopContext.currentProxy()).addCustomer(); //... 但是,我得到一个错误--“找不到代理”将expose proxy设置为true 使用静态方法是这种错

我正在@service类实现中使用Spring的AOPContext.currentProxy()。然而,我在一个静态的方法中使用它,我做了如下的事情

public static void addCustomer() {
    //....

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

    //...
但是,我得到一个错误--“找不到代理”将expose proxy设置为true

使用静态方法是这种错误的原因吗

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


提前感谢。

您的配置是否包含类似于
的内容?

您的配置是否包含类似于
的内容?

我不确定您想做什么,但您根本无法这样做

静态
方法的调用在编译时解析,因此它们不会受到基于代理的AOP的影响。换言之:

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

我不确定你想做什么,但你根本不能这样做

静态
方法的调用在编译时解析,因此它们不会受到基于代理的AOP的影响。换言之:

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

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

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

这是一个大错误,我在现有代码中发现了它,并希望检查这种方式是否确实错误。静态方法与bean不关联,因此无法通过调用AopContext.currentProxy()获取代理。我write@axtavt:我现在无法测试它,但我不明白为什么在静态方法中调用
AopContext.currentProxy()
。它从线程局部变量获取其值。也许这让人困惑,或者不是用户所期望的,但我认为它一定能工作。这是一个很大的错误,我在现有代码中发现了它,并想检查这样做是否确实是错误的。静态方法与bean不关联,因此无法通过调用AopContext.currentProxy()获取代理。我write@axtavt:我现在无法测试它,但我不明白为什么在静态方法中调用
AopContext.currentProxy()
。它从线程局部变量获取其值。也许这让人困惑,或者不是用户所期望的,但我认为它必须起作用。