2

我熟悉 Spring AOP,尽管在这方面没有太多的实践经验。

我的问题是,如果我想为类的某些方法(不是全部)提供一些 AOP 功能,那么单切入点是否可行。比如说,我的班级中有四个方法save1、save2、get1 和 get2,我只想在save1 和 save2上应用 AOP ,那么在这种情况下,我该如何为此创建一个切入点?我的切入点表达式会是什么样子?或者有可能吗?

4

4 回答 4

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

于 2012-09-25T18:35:04.987 回答
1

您需要指定一个切入点表达式来选择方法来应用您的建议。

请参阅Spring 文档中的 7.2.3 声明切入点并使用执行连接点指示符来选择方法。

于 2012-09-25T18:27:37.403 回答
1

像这样有一个切入点表达式应该可以解决问题

**execution(* save*(..))**

请参阅此处了解更多信息

于 2012-09-25T18:30:06.253 回答
0

You can use or and and with pointcut expressions:

execution(* my.Class.myMethod(..)) or execution(* my.Class.myOtherMethod(..))
于 2012-09-25T18:52:06.767 回答