我熟悉 Spring AOP,尽管在这方面没有太多的实践经验。
我的问题是,如果我想为类的某些方法(不是全部)提供一些 AOP 功能,那么单切入点是否可行。比如说,我的班级中有四个方法save1、save2、get1 和 get2,我只想在save1 和 save2上应用 AOP ,那么在这种情况下,我该如何为此创建一个切入点?我的切入点表达式会是什么样子?或者有可能吗?
我熟悉 Spring AOP,尽管在这方面没有太多的实践经验。
我的问题是,如果我想为类的某些方法(不是全部)提供一些 AOP 功能,那么单切入点是否可行。比如说,我的班级中有四个方法save1、save2、get1 和 get2,我只想在save1 和 save2上应用 AOP ,那么在这种情况下,我该如何为此创建一个切入点?我的切入点表达式会是什么样子?或者有可能吗?
有很多方法可以做到(使用通配符表达式,使用 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
您需要指定一个切入点表达式来选择方法来应用您的建议。
请参阅Spring 文档中的 7.2.3 声明切入点并使用执行连接点指示符来选择方法。
You can use or
and and
with pointcut expressions:
execution(* my.Class.myMethod(..)) or execution(* my.Class.myOtherMethod(..))