我正在编写非常基本的基于模式的 Spring AOP,这是 .xml
<bean id="aoplistener" class="tao.zhang.Listener"/>
<aop:config>
<aop:aspect ref="aoplistener">
<aop:pointcut id="whenCalled" expression="execution(* callme(..))" />
<aop:after method="scream" pointcut-ref="whenCalled" />
</aop:aspect>
</aop:config>
方法scream()在 tao.zhang.Listener 中只是打印出一些文本,并且应该在调用方法 callme() 时执行。
我有一个豆子叫logger它有方法 log() 和 callme()
public void log(){
callme();
System.out.println("Hello from logger ~~~~~~~~~~~~~~~~~~~");
}
public void callme(){
System.out.println("I'm called");
}
注意 callme() 是由 log() 调用的
现在我有一个每 5 秒调用 log() 的调度程序:
<task:scheduler id="myScheduler" pool-size="10"/>
<task:scheduled-tasks scheduler="myScheduler">
<task:scheduled ref="logger" method="log" fixed-rate="5000"/>
</task:scheduled-tasks>
奇怪的是,scream()没有被调用,但是如果直接调用callme():
<task:scheduler id="myScheduler" pool-size="10"/>
<task:scheduled-tasks scheduler="myScheduler">
<task:scheduled ref="logger" method="callme" fixed-rate="5000"/>
</task:scheduled-tasks>
scream()被调用!
有什么建议么?在我看来,这个切入点与另一个方法中调用的方法不匹配......