Java 在SpringAOP中指定切入点

Java 在SpringAOP中指定切入点,java,spring,spring-aop,Java,Spring,Spring Aop,我熟悉SpringAOP,尽管在这方面没有太多实际操作经验 我的问题是,如果我想为一个类的某些方法(而不是所有方法)提供一些AOP功能,那么单切入点是否可行。比如说,我的类中有四个方法save1、save2、get1和get2,我只想在save1和save2上应用AOP,那么在这种情况下,我如何为它们创建一个切入点呢?我的切入点表达式会是什么样子?或者甚至可能吗?您需要指定一个切入点表达式来选择应用建议的方法 请参阅7.2.3在中声明切入点,并使用执行接合点指示器选择方法。您需要指定切入点表达式

我熟悉SpringAOP,尽管在这方面没有太多实际操作经验


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

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


请参阅7.2.3在中声明切入点,并使用执行接合点指示器选择方法。

您需要指定切入点表达式来选择方法,以应用建议


请参阅7.2.3在中声明切入点,并使用执行接合点指示器选择方法。

使用类似于这样的切入点表达式应该可以实现这一目的

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

有关更多信息,请参见

使用类似so的切入点表达式应该可以实现这一目的

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

有关更多信息,请参见

使用通配符表达式、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就会在aspect之前调用这个方法,确保spring管理的是这个方法和对象,而不是你们。在类路径中包含aspectJ有很多方法可以使用通配符表达式、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就会在aspect之前调用这个方法,确保spring管理的是这个方法和对象,而不是你们。将aspectJ包含在类路径中

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

execution(* my.Class.myMethod(..)) or execution(* my.Class.myOtherMethod(..))
您可以将或与切入点表达式一起使用:

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

实际或不起作用,必须使用| |而不是执行*my.Class.myMethod..|execution*my.Class.myOtherMethod..实际上或不起作用,必须使用| |代替execution*my.Class.myMethod执行*my.Class.myOtherMethod。。