Spring切面优先级与重用切点表达式

一、切面优先级
@Order ( 1 )
@Aspect
@Component
public class  LoggingAspect  {
   
}
--在同一个连接点上应用不止一个切面,除非明确指定,否则它们的优先级是不确定的
--切面的优先级可以通过实现Ordered接口或者利用@Order注解指定
--实现Orderd接口,getOrder方法的返回值越小,优先级越高
--使用@Order注解,序号写在注解中

二、重用切点表达式
/**
 * 定义一个方法,用于声明切入点表达式,一般该方法中不需要其他代码
 */
@Pointcut ( "execution(public int aop.AtithmeticCalculatorImpl.*(int,int))" )
public void  declareJointPointExpression (){}
 
@Before ( "declareJointPointExpression()" )
public void  beforeMethod ( JoinPoint  joinPoint ){
    System . out . println ( "调用" + joinPoint . getSignature () . getName () + "方法,处理" Arrays . asList ( joinPoint . getArgs ())) ;
}
@After ( "aop.LoggingAspect.declareJointPointExpression()" )
public void  afterMethod ( JoinPoint  joinPoint ){
    System . out . println ( "调用" + joinPoint . getSignature () . getName () + "方法结束" ) ;
}
--在编写AspectJ切面时,可以直接在通知注解中书写切入点表达式,但同一个切入点表达式可能会在多个通知中重复出现
--在AspectJ切面中,可以通过@Pointcut注解将契入点声明成简单的方法,切入点的方法通常是空的,应为将切入点定义与应用程序逻辑混在一起很不合理
--切入点方法的访问控制符同时也控制着这个切入点的可见性,如果切入点要在多个切面中公用,最好将它们集中在同一个公告的类中,在这种情况下,它们必须被声明为public。在引入这个切入点时,必须将类名也包含在内,如果类没有与这个切面放在同一个包中,还必须包含包名。
--其他通知可以通过方法名称引入该切入点

猜你喜欢

转载自blog.csdn.net/qq_34886352/article/details/79348299
今日推荐