【发布时间】:2015-02-19 10:25:33
【问题描述】:
我正在尝试使用 AspectJ 学习 Spring AOP 实现。 我在不同的包中有 5 个类。
package com.sample.a;
Class A{
public void save(){
}
}
}
package com.sample.b;
Class B {
public void save(){
}
}
package com.sample.c;
Class C {
public void save(){
}
}
package com.sample.d;
Class D{
public void save(){
}
}
package com.sample.e;
Class E{
public void save(){
}
}
每当调用这些方法时,我都需要打印“Hello World”,如何使用 Spring AOP (AspectJ) 实现上述场景。到目前为止,我已经完成了以下操作 -
1) 在 applicationContext.xml 中启用 Spring AspectJ 支持
<aop:aspectj-autoproxy />
2) 在applicationContext.xml中定义Aspect的引用
<bean id="sampleAspectJ" class="com.sample.xxxxxxxx" />
3) 方面类
/**
* aspect class that contains after advice
*/
package com.sample;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
@Aspect
public class SpringAopSample{
@After(value = "execution(* com.sample.*.Save(..))")
public void test(JoinPoint joinPoint) {
System.out.println("Hello World");
}
}
有没有更好的方法来实现上述场景?如果这 5 个类在不同的包中并且具有不同的方法名称怎么办?我是否需要在方面编写5种不同的方法(用@after建议注释)
【问题讨论】:
-
“更好”是什么意思?您究竟希望切入点匹配什么?
-
关于您的问题 - “如果这 5 个类位于不同的包中并且具有不同的方法名称怎么办?” - 如果他们有不同的名字,你仍然需要有一些共同的模式,这样你就可以创建一个正则表达式,否则这个方面将被应用于类中的所有方法,这可能不是预期的。
标签: spring aop aspectj spring-aop