我在@service类实现中使用Spring的AOPContext.currentProxy()。但是,我在静态方法中使用它,我做了类似
的操作public static void addCustomer() {
//....
((CustomerService) AopContext.currentProxy()).addCustomer();
//...
但是,我收到错误 - “找不到代理”将expose-proxy设置为true。
使用静态方法出现这种错误的原因是什么?
注意:“ addCustomer ”方法也是静态的
提前致谢。
答案 0 :(得分:3)
在创建实例时注入代理配置。假设使用此代理创建的实例,您调用方法AOP适用于该方法。假设没有代理实例或使用类名(在静态的情况下),你调用方法是直接调用代理配置没有注入实例,所以AOP不适用于该方法调用。
答案 1 :(得分:1)
我不确定你要做什么,但你不能这样做。
static
方法的调用在编译时解析,因此它们不受基于代理的AOP的影响。换句话说:
AopContext.currentProxy()
在静态方法中没有意义(除非你想获得一个代理来封闭一些实例方法的调用),因为静态方法的调用没有被代理AopContext.currentProxy()
返回的实例上调用静态方法没有意义,因为它在编译时使用静态类型的表达式解析,即它编译为CustomerService.addCustomer()
。答案 2 :(得分:0)
您的配置是否包含<aop:config expose-proxy="true" />
?