Java AOP实现和应用

Java中常使用到AOP功能,实现AOP分三步:

1,定义一个切面类,类前加@component注解,使该类注入spring的IOC容器中,使之受spring管理,同时类前加@Aspect注解,使该类成为切面类,定义了是什么,即解决What的问题

2,在切面类中的实现了某些功能的各个方法前加上如下相应注解,定义切入的时间点,解决When的问题
@Before(value="该方法作用的目标表达式"),前置通知,例如;

@Before(value="myPonitcut01()")
public void beforeExecute(JoinPoint joinPoint){
//...方法执行前的处理...
}

@AfterReturning(value="该方法作用的目标表达式",returning="result"),返回值通知,其中result要与方法中对应参数名一样,例如;

@AfterReturning(value="myPonitcut01()", returning="result")
public void afterExecute(JoinPoint joinPoint, Object result){
//...方法返回值时的处理...
}

@After(value="该方法作用的目标表达式"),后置通知,例如;

@After(value="myPonitcut01()")
public void afterExecute(JoinPoint joinPoint) throws Throwable{
//...方法执行后的处理...
}

@AfterThrowing(value="该方法作用的目标表达式",throwing="e"),异常通知,其中 e 要与方法中对应参数名一样,例如;

@AfterThrowing(pointcut = "myPonitcut01()", throwing="e") 
public void afterThrowing(JoinPoint joinPoint, Throwable e){
//...方法执行报异常时的处理...
}

@Around(value="该方法作用的目标表达式"), 环绕通知,注意这里的方法参数是 ProceedingJoinPoint,例如:

@Around(value="myPonitcut01()")
public void aroundExecute(ProceedingJoinPoint joinPoint) throws Throwable{
//...方法执行前后的处理...
}

上面各个注解的value值如果有多个表达式可用 与&& 或||  非!进行相应连接,即跟平时写的Java代码的与或非一样,例如;

@Before(value="myPonitcut01() || myPonitcut02()")
public void beforeExecute(JoinPoint joinPoint){
//...方法执行前的处理...
}

3,定义方法作用的目标表达式,解决在哪里应用切面类方法的问题,即解决了Where的问题,一般为:
execution(* com.xxx.yyy.kkk.*.*(..)),或者 //任意返回类型,不指定方法修饰符,如public方法
execution(public * com.xxx.yyy.kkk.*.*(..)),//任意返回类型,指定方法修饰符仅public方法
也可以在切面类的定义某个返回void的方法(如:myPonitcut01())前加注解
@Pointcut(value="切入点作用的目标表达式"),或者
@Pointcut(value="@annotation(com.aa.bb.cc.某个已有或自定义的注解类")
然后在AOP的第2步中的各个注解的value中使用该方法,例如@Before(value="myPonitcut()"),目的是取得切入点作用的目标表达式;

欢迎拍砖讨论...
 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值