aop面向切面编程

狂妄的老头 狂妄的老头     2022-09-23     196

关键词:

先写一段正确的执行程序的代码,然后对其进行面向切面编程(AOP)

1,准备切面(就是下面的这个TxAspect)

2,准备连接点(就是测试类中的目标方法)

3.编写通知(就是TxAspect中的前置、后置、异常、最终、环绕通知)

另:

前置、后置、异常、最终通知都不能影响目标方法执行,而环绕通知能控制目标方法执行。

另:

Proceedingjoinpoint 继承了 JoinPoint 。是在JoinPoint的基础上暴露出 proceed 这个方法。proceed很重要,这个是aop代理链执行的方法。暴露出这个方法,就能支持 aop:around 这种切面(而其他的几种切面只需要用到JoinPoint,这跟切面类型有关), 能决定是否走代理链还是走自己拦截的其他逻辑。

在ProceedingJoinPoint中只有proceed()方法,用来控制目标方法执行.那么该参数只能用到 环绕通知中。

 

4.编写切面配置(就是最后面的配置信息 expression() 是细粒度的 匹配规则,粗粒度的使用within() 根据类进行匹配)

 

 

 1 package aspect;
 2 
 3 import org.aspectj.lang.JoinPoint;
 4 import org.aspectj.lang.ProceedingJoinPoint;
 5 import org.springframework.stereotype.Component;
 6 
 7 //切面
 8 @Component
 9 public class TxAspect {
10     //通知
11     public void before(JoinPoint joinPoint){
12         System.out.println("我是一个前置通知方法");
13         //获取目标对象的类型
14         Class targetClass = joinPoint.getTarget().getClass();
15         //获取目标方法的名称
16         String methodName = joinPoint.getSignature().getName();
17         System.out.println("目标对象:"+targetClass);
18         System.out.println("目标方法:"+methodName);
19     }
20     
21     
22     public void after(JoinPoint joinpoint){
23         System.out.println("我是一个后置通知方法");
24         Class targetClass = joinpoint.getTarget().getClass();
25         String methodName = joinpoint.getSignature().getName();
26         System.out.println("目标对象:"+targetClass);
27         System.out.println("目标方法:"+methodName);
28     }
29     public void afterThrow(JoinPoint joinPoint,Throwable throwable){
30         System.out.println("我是一个异常通知");
31         Class throwClass = throwable.getClass();
32         String msg = throwable.getMessage();
33         System.out.println("异常的类型为:"+throwClass);
34         System.out.println("异常的信息为:"+msg);
35     }
36     public void afterAdvice(){
37         System.out.println("我是一个最终通知");
38     }
39     
40     public Object around(ProceedingJoinPoint joinPoint) throws Throwable{
41         System.out.println("环绕通知开始");
42         Object result = joinPoint.proceed();
43         System.out.println("环绕通知结束");
44         return null;
45                 
46     }
47     
48     
49 }

 

 1    <context:component-scan base-package="service,aspect"/>
 2    
 3    <aop:config>
 4            <aop:pointcut expression="execution(* service..*.*(..))" id="pc"/>
 5            <aop:aspect ref="txAspect">
 6                <aop:before method="before" pointcut-ref="pc"/>
 7                <aop:after method="after" pointcut-ref="pc"/>
 8                <aop:after-throwing method="afterThrow" pointcut-ref="pc" throwing="throwable"/>
 9                <aop:after-returning method="afterAdvice" pointcut-ref="pc"/>
10                <aop:around method="around" pointcut-ref="pc" />
11            </aop:aspect>
12    </aop:config>

 

不出错的话结果是这样:

我是一个前置通知方法
目标对象:class service.UserServiceImpl
目标方法:updateUser
环绕通知开始
更新用户信息
环绕通知结束
我是一个最终通知
我是一个后置通知方法
目标对象:class service.UserServiceImpl
目标方法:updateUser

出错的话,最终通知不会执行,环绕通知不会正确结束

我是一个前置通知方法
目标对象:class service.UserServiceImpl
目标方法:addUser
环绕通知开始
添加一个用户
我是一个异常通知
异常的类型为:class java.lang.ArithmeticException
异常的信息为:/ by zero
我是一个后置通知方法
目标对象:class service.UserServiceImpl
目标方法:addUser

 最后:

如果JoinPoint joinPoint参数在通知中与其他参数一起联用时,参数位置必须位于第一位.否则报错.

aop(面向切面编程)

AOP (面向切面编程) 编辑在软件业,AOP为AspectOrientedProgramming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring... 查看详情

aop:面向切面

AOP: 面向切面编程,是一种编程思想,是对面向对象的一种补充.    :面向对象是静态角度考虑程序结构而面向切面是动态的考虑程序运行过程.:面向切面编程是将交叉业务封装成切面,利用AOP容器功能将切面织入到... 查看详情

aop面向切面编程(个人笔记1.1)(代码片段)

AOP面向切面编程AOP面向切面编程存在的实现方式经典的基于代理的AOP:AspectJAOP面向切面编程AOP(Aspect-OrientedProgramming:面向切面编程)将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权... 查看详情

aop面向切面编程

...读(30406)评论(6) 编辑 收藏AspectOrientedProgramming 面向切面编程。解耦是程序员编码开发过程中一直追求的。AOP也是为了解耦所诞生。具体思想是:定义一个切面,在切面的纵向定义处理方法,处理完成之后,回到横向业 查看详情

aop(面向切面编程)

1.什么是AOP?AOP(AspectOrientedProgramming)面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护。在不改变源代码的情况下给程序动态统一添加功能的一种技术。在AOP中,我们关注横切点,将通用的处理流程... 查看详情

spring的aop面向切面编程

...P概念介绍  所谓AOP,即Aspect orientied program,就是面向方面(切面)的编程。   功能:让关注点代码与业务代码分离!关注点:         重复代码就叫做关注点;业务代码:    核心业务... 查看详情

串线篇面向切面编程aop

面向切面编程AOP描述:将某段代码“动态”的切入到“指定方法”的“指定位置”进行运行的一种编程方式(其底层就是Java的动态代理)spring对其做了简化书写场景:1)、AOP加日志保存到数据库2)、AOP做权限... 查看详情

aop面向切面编程

先写一段正确的执行程序的代码,然后对其进行面向切面编程(AOP)1,准备切面(就是下面的这个TxAspect)2,准备连接点(就是测试类中的目标方法)3.编写通知(就是TxAspect中的前置、后置、异常、最终、环绕通知)另:前置... 查看详情

面向切面编程(aop)(代码片段)

结合设计模式,通过代码理解面向切面编程通过,结构型设计模式,装饰器模式来实现AOP///<summary>///装饰器模式实现静态代理///AOP在方法前后增加自定义的方法///</summary>publicclassDecoratorAOPpublicstaticvoidShow()Useruser=newUser()Name="... 查看详情

spring框架--aop面向切面编程(代码片段)

...)–SpringBean管理Spring框架(三)–SpringJDBCSpring框架(四)–AOP面向切面编程Spring框架(五)–Spring事务管理和Spring事务传播行为AOP(AspectOrientedProgramming面向切面编程)不使用AOP的开发方式的例子先定义好接口与一个实现类 查看详情

aop面向切面编程笔记

1.AOP概念:AspectOrientedProgramming面向切面编程2.作用:本质上来说是一种简化代码的方式 继承机制 封装方法 动态代理 …… 3.情景举例 ①数学计算器接口[MathCalculator] intadd(inti,intj); intsub(inti,intj); intmul(inti,intj); intdiv(inti,intj); ②... 查看详情

面向切面编程aop之动态代理

动态代理的作用是:最终是为了学习AOP(面向切面编程);   拓展一下:OOP是什么? OOP是面向对象编程!!面向切面---》与装饰者模式有点相似    ---》比装饰者模式还要灵活 学习动态代理,我们只需要学... 查看详情

aop面向切面编程

  在软件业,AOP意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利... 查看详情

javascript实现aop(面向切面编程)

什么是AOP?  AOP(面向切面编程)的主要作用是把一些跟核心业务逻辑模块无关的功能抽离出来,这些跟业务逻辑无关的功能通常包括日志统计、安全控制、异常处理等。把这些功能抽离出来之后,再通过“动态织入”的方式掺... 查看详情

什么是aop面向切面编程

...n.net/moreevan/article/details/11977115/AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-OrientedPrograming,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一... 查看详情

什么是aop面向切面编程思想

...抽取特别像的东西。如图,是一种横向的抽取,所以叫做面向切面。下面两个图简单的体现了AOP的原理↓↓↓ 这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。AOP是Spring... 查看详情

aop面向切面编程aop简介(aspectj简介|aspectj下载)(代码片段)

...三、AspectJ下载一、AOP简介AOP是AspectOrientedProgramming的缩写,面向切面编程;利用AOP面向切面编程,可以将业务逻辑的各个部分进行隔离,每个业务逻辑部分放在一个切面中实现,降低了各个业务逻辑之间的耦合程度,提高了程序的灵活性,... 查看详情

aop面向切面

...OP是OOP的延续,是(AspectOrientedProgramming)的缩写,意思是面向切面编程。AOP(AspectOrientProgramming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等... 查看详情