在Spring AOP中指定切入点

时间:2012-09-25 18:22:29

标签: java spring spring-aop

我熟悉Spring AOP,虽然没有太多的实践经验。

我的问题是,如果我想为类的某些方法提供一些AOP功能,而不是全部,那么单点切入是否可行。说,我的课程中有四种方法 save1,save2,get1和get2 ,我只想在 save1和save2 上应用AOP,那么在这种情况下如何创建一个切入点?我的切入点表达式如何?或者甚至可能吗?

4 个答案:

答案 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)

拥有像这样的切入点表达式应该可以做到这一点

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

有关详细信息,请参阅here

答案 3 :(得分:0)

您可以将orand与切入点表达式一起使用:

execution(* my.Class.myMethod(..)) or execution(* my.Class.myOtherMethod(..))