我熟悉Spring AOP,虽然没有太多的实践经验。
我的问题是,如果我想为类的某些方法提供一些AOP功能,而不是全部,那么单点切入是否可行。说,我的课程中有四种方法 save1,save2,get1和get2 ,我只想在 save1和save2 上应用AOP,那么在这种情况下如何创建一个切入点?我的切入点表达式如何?或者甚至可能吗?
答案 0 :(得分:2)
有很多方法可以做到这一点(使用通配符表达式,使用aspectJ注释,...) 我将举例说明aspectJ
class MyClass{
@MyPoint
public void save1(){
}
@MyPoint
public void save2(){
}
public void save3(){
}
public void save4(){
}
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyPoint {
}
@Aspect
@Component
public class MyAspect {
@Before("@annotation(com.xyz.MyPoint)")
public void before(JoinPoint joinPoint) throws Throwable {
//do here what u want
}
}
所以你已经完成了设置,只要你标记了@Mypoint
注释,spring就会调用此方法的方面,确保spring正在管理这个方法和对象,而不是你。在类路径中包含aspectJ
答案 1 :(得分:1)
您需要指定切入点表达式以选择要应用建议的方法。
参见7.2.3在the Spring Documentation中声明切入点并使用执行连接点指示符选择方法。
答案 2 :(得分:1)
答案 3 :(得分:0)
您可以将or
和and
与切入点表达式一起使用:
execution(* my.Class.myMethod(..)) or execution(* my.Class.myOtherMethod(..))