Spring Aop理解

aop思想

  • aop是一种思想;aop:不改变原始方法的基础上对方法进行增强
  • aop中的实现:连接点–>切点–>切面—>通知—>通知类
  • aop的核心实现是通过代理完成的
    spring 配置
@Configuration
@PropertySource("classpath:xxx.properties")
//不使用XML的配置方式
@EnableAspectJAutoProxy
public class SpringConfig{
}

aop 配置

/**
*通知类
*/
@Configuration
@Aspect
public class Message{
   /**
   *@PointCut定义切点,execution指的是连接点
   */
   @Pointcut("execution(com.*.find*(..))")
   public void pi(){}
   
   @Pointcut("execution(* com.*.add(..))")
   public void piAround(){}
   
   //@Before只在前执行,JoinPoint是连接点方法的参数,@After 用法一样
   @Before("pi()")
   public void px(JoinPoint jp){
    Object[] args= jp.getArgs(); //得到是参数的数组
    ....  //之前执行
  }
  
  //环绕,通过ProceedingJoinPoint可告知连接点的方法在哪一步
  @Around("Message.piAround()")
  public Object ar(ProceedingJoinPoint pjp) throw Throwable {
  //同样得到是参数的数组、
  Object[] args= pjp.getArgs();
   //获取签名 
  Signature s= pjp.getSignature();
  //获取方法名
  String methodName=s.getName(); 
  //全限定类名
  s.getDeclaringTypeName();
   
   .... //执行前操作
  Object res= pjp.proceed();
   ... //执行后操作
  return res;
}
 //@AfterReturning 运行结束后执行,不需要获取参数写法 @AfterReturning("pi()")
 @AfterReturning(value="pi()",returning="re") //获取参数写法
 public void returnning(String re){/**这里re必须和注解里一样,
                                    *如果需要JoinPoint,JoinPoint必须放在首位(JoinPoint jp,String re)
                                   */
       ... //执行代码

 }
 /**
 *@AfterThorwing:异常后增强;不需要获取参数写法@AfterThorwing("pi()")
 *需要获取携带参数时@AfterThorwing(value="pi()",throwing="tw")
 如果需要JoinPoint,JoinPoint必须放在首位(JoinPoint jp,Thorwable tw)
 */
 @AfterThorwing(value="pi()",throwing="tw")
  public void throwings(Thorwable tw){
   ....
}
}

@After和@AfterReturning除啦在参数用法不同以外还有就是after不管程序是否有异常都会执行,而@AfterReturning必须程序无异常执行完才会实现

文章借鉴与地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值