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