0

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

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

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

    //...

但是,我得到了错误——“找不到代理”将暴露代理设置为真。

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

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

提前致谢。

4

3 回答 3

3

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

于 2012-12-13T11:32:41.953 回答
1

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

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

  • AopContext.currentProxy()在静态方法内部没有意义(除非您想获得一个代理来封闭对某些实例方法的调用),因为静态方法的调用没有被代理
  • 在返回的实例上调用静态方法AopContext.currentProxy()没有意义,因为它是在编译时使用静态类型的表达式解析的,即它编译为CustomerService.addCustomer().
于 2012-08-29T15:08:05.997 回答
0

您的配置是否包括类似的内容<aop:config expose-proxy="true" />

于 2012-08-29T15:02:34.430 回答