在Bean内部调用该方法时,Spring AOP无法正常工作
我的应用程序中编码了几个方面。除以下内容外,其他所有功能均有效。
Service Interface
package com.enbiso.proj.estudo.system.service;...
public interface MessageService {
...
Message reply(Message message);
Message send(Message message);
...
}
Service Implementation
package com.enbiso.proj.estudo.system.service.impl;....
@Service("messageService")
public class MessageServiceImpl implements MessageService {
...
@Override
public Message reply(Message message) {
...
return this.send(message);
}
@Override
public Message send(Message message) {
...
}
}
Aspect
@Aspect@Component
public class NewMessageAspect {
...
@AfterReturning(value = "execution(* com.enbiso.proj.estudo.system.service.impl.MessageServiceImpl.send(..))",
returning = "message")
public void perform(Message message){
...
}
}
当我尝试执行该send方法时,调试点在方面没有受到影响perform。
更新
我做了一些调查,发现当send
从reply
下面的方法中调用该方法时,这是行不通的
@Autowire MessageService messageService;...
messageService.reply(message);
但是,如果我调用该方法,messageService.send(message)
它将可以正常工作。但是,当Reply方法在内部调用send方法时,它是否也应该调用方面?
我不知道我做错了什么。请帮我。
回答:
假设有一个来自 SimplePojo
public class SimplePojo implements Pojo { public void foo() {
this.bar();
}
public void bar() {
...
}
}
当我们调用方法时foo()
,它会重新调用其中的方法bar()
。即使foo()
从AOP
代理调用了该方法,AOP代理bar()也不会涵盖的内部调用。
因此,如果没有任何建议附加到该方法bar()
上,则最终将导致不被调用
解
使用AopContext.currentProxy()
要调用的方法。不幸的是,这将逻辑与AOP耦合在一起。
public void foo() { ((Pojo) AopContext.currentProxy()).bar();
}
以上是 在Bean内部调用该方法时,Spring AOP无法正常工作 的全部内容, 来源链接: utcz.com/qa/421164.html