AspectJ的注解开发AOP:环绕通知的学习

环绕通知的注解为@Around
around方法的返回值就是目标代理方法执行返回值
参数ProceedingJoinPoint可以拦截目标方法的执行
切面类配置如下
i

mport org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

import java.math.BigInteger;

@Aspect
public class aspectj {
// @Before(value = "execution(* com.AspecJ.xiaomaoDao.*(..))")
// public void before(){
// System.out.println("我是前置通知!");
// }

// @AfterReturning(value = "execution(* com.AspecJ.xiaomaoDao.delete())",returning = "element")
// 使用returning来接受返回值
// public void After(Object element){
// System.out.println("我删除了"+element); //打印输出了返回值
// }

@Around(value="execution(* com.AspecJ.xiaomaoDao.update())")
public Object around(ProceedingJoinPoint joinPoint){
Object obj=null;
System.out.println("环绕前");
try {
obj=joinPoint.proceed();
} catch (Throwable throwable) {
throwable.printStackTrace();
}
System.out.println("环绕后");
return obj;
}
}

目标类方法如下:

public class xiaomaoDao {
public void save(){
System.out.println("save xiaomao!");
}
public void find(){
System.out.println("find xiaomao!");
}
public String delete(){
System.out.println("delete xiaomao!");
return "xiaomao";
}
public void update(){
System.out.println("update xiaomao!");
}
}

执行结果如下:

delete xiaomao!
find xiaomao!
save xiaomao!
环绕前
update xiaomao!
环绕后

原文地址:https://www.cnblogs.com/xiaolaha/p/11370854.html

时间: 2024-10-10 17:59:33

AspectJ的注解开发AOP:环绕通知的学习的相关文章

AspectJ的注解开发AOP:异常抛出通知的学习

异常抛出通知使用@AfterThrowing 在切面类中配置: import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import java.math.BigInteger; @Aspect public class aspectj { // @Before(value = "execution(* com.AspecJ.xiaomaoDao.*(..))") // publ

AspectJ的注解开发AOP:最终通知的学习

最终通知的注解为@After 无论是否发生异常,最终通知总是被执行 在切面类中如下定义使用: @After(value = "execution(* com.AspecJ.xiaomaoDao.find())") public void after(){ System.out.println("最终通知执行了!"); } 原文地址:https://www.cnblogs.com/xiaolaha/p/11370918.html

AspectJ的注解开发AOP:切点定义

通过@Pointcut为切点命名,方便我们统一管理 在每个通知内定义切点,会造成工作量大,不易维护,对于重复的切点,可以使用@Pointcut进行定义 切点方法:private void无参方法,方法名为切点名 当通知多个切点时,可以使用||来进行连接 具体代码: import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import java.math.BigInteger; @Aspe

Spring AspectJ基于注解的AOP实现

对于AOP这种编程思想,很多框架都进行了实现.Spring就是其中之一,可以完成面向切面编程.然而,AspectJ也实现了AOP的功能,且实现方式更为简捷,使用更加方便,而且还支持注解式开发.所以,Spring又将AspectJ对于AOP的实现也引入到了自己的框架中.     在Spring中使用AOP开发时,一般使用AspectJ的实现方式. Spring的经典AOP配置方案  01.使用的是Aspectj第三方框架,实现了AOP思想  02.注解配置的AOP  03.纯POJO <aop:c

Spring4深入理解AOP02----AOP简介,AspectJ基于注解(5种通知,切面优先级)

参考代码下载github:https://github.com/changwensir/java-ee/tree/master/spring4 一.AOP简介 ?AOP(Aspect-Oriented Programming, 面向切面编程):是一种新的方法论,是对传统OOP(Object-OrientedProgramming,面向对象编程)的补充. ?AOP 的主要编程对象是切面(aspect),而切面模块化横切关注点. ?在应用 AOP 编程时,仍然需要定义公共功能,但可以明确的定义这个功

spring aop环绕通知记录应用的日志

使用的框架是spring mvc+spring 最近想利用spring aop的环绕通知来处理web的日志问题,总的来讲,如果在controller层做切入,则难监控实际运行情况,在service层做切入,则只能监控到service层的情况,通过捕捉service抛出的异常来记录日志,对于目前本人应用而言,已经足够了,先将记录如下: 代码: @Component @Aspect public class ExceptionLog { /** * 61 * 环绕通知需要携带ProceedingJo

【Spring实战】—— 9 AOP环绕通知

假如有这么一个场景,需要统计某个方法执行的时间,如何做呢? 典型的会想到在方法执行前记录时间,方法执行后再次记录,得出运行的时间. 如果采用Spring的AOP,仅仅使用前置和后置方法是无法做到的,因为他们无法共享变量.这样通过环绕通知,就可以快捷的实现. 首先在切面通知类中声明环绕通知类: public void watchPerformance(ProceedingJoinPoint joinpoint){ try{ System.out.println("begin!"); lo

Spring_Spring与AOP_AspectJ基于注解的AOP实现

一.AspectJ.Spring与AOP的关系 AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件.(百度百科) Spring又将AspectJ的对于AOP的实现引入到自己的框架中. 在Spring中使用AOP开发时,一般使用AspectJ的实现方式. 二.AspectJ的通知类型 前置通知 后置通知 环绕通知 异常通知 最终通知 三.AspectJ的切入点表达式 表达式中加[]的部分

Spring AOP 之 通知、连接点、切点、切面。

1:知识背景 软件系统可以看成是由一组关注点组成的,其中,直接的业务关注点,是直切关注点.而为直切关注点提供服务的,就是横切关注点. 2:面向切面的基本原理 什么是面向切面编程 横切关注点:影响应用多处的功能(安全.事务.日志) 切面: 横切关注点被模块化为特殊的类,这些类称为切面 优点: 每个关注点现在都集中于一处,而不是分散到多处代码中 服务模块更简洁,服务模块只需关注核心代码. AOP 术语 通知: 定义:切面也需要完成工作.在 AOP 术语中,切面的工作被称为通知. 工作内容:通知定义了