使用代理模式实现Spring AOP的面向切面编程,动态代理的四种增强处理

什么是代理类?
代理就是代替我们去执行一些额外的工作。

目标类:只有核心功能的类

比如我们在写service的时候,调用dao方法是我们的核心业务而service类中的日志记录,事务处理,异常处理等都属于额外的功能,每个service方法中都要写一次这些额外功能也会造成大量代码的冗余,

而面向切面编程的意思就是说把这些公共的、额外的代码功能抽取出来,每个service里面只写我们的核心业务,这样就提高了我们的开发效率。

为什么代理类和目标类要实现相同的接口?
1.从代码的角度来说,代理类对象能够赋值给接口类型的变量
2.要保证代理类和目标类有相同的功能

有了代理类:
程序员可以只关心核心功能

额外功能+目标类 =代理类

以上这种说法就是叫做静态代理,
静态代理就是在代码编译时,代理类已经存在
好处:程序员可以只关心核心功能
不好:多个代理类 , 没有解决代码冗余的问题

什么是动态代理?

运行时,动态创建出来代理对象
SpringAOP通过动态代理,让程序猿只关心核心代码,同时代码不再冗余

springAOP的开发步骤:
1.写核心功能(目标类)
核心功能就是调用dao方法:
在这里插入图片描述
2.配置目标类
要在SpringApplication.xml文件中配置目标类所在路径

 <!--配置目标类-->
    <bean id="bookService" class="com.macw.serviceImpl.bookServiceImpl">
        <property name="bookDao" ref="bookDao"></property>
    </bean>

3.写额外功能(增强处理)
(公共功能:日志处理/事务处理/异常处理/性能分析…) 等

前置增强(MethodBeforeAdvice):在核心功能之前执行的额外功能
后置增强:在核心功能之后执行的额外功能

环绕增强:在核心功能之前以及之后执行的额外功能
异常增强:在核心功能发生异常时执行的额外功能

前置增强的配置使用:
1,声明一个类,需要实现 MethodBeforeAdvice接口:
在这里插入图片描述
2,spring配置文件中,配置声明的增强功能类

	<!--额外功能-->
   <bean id="myBeforeAdvice" class="com.macw.advice.myBeforeAdvice"></bean>

3,在spring配置文件中,通过aop标签做配置(需要添加aop命名空间以及schema验证文档):
.在哪些方法上面做增强处理
.在需要增强处理的方法上面,加哪个增强处理
在这里插入图片描述
4.让spring在运行的时候,帮我们创建代理对象()
在这里插入图片描述

详解advice
MethodBeforeAdvice前置增强的before方法

实现MethodBeforeAdvice接口必须要要实现before方法,这个方法有三个参数,
arg0:目标方法,
arg1:目标方法参数,
arg2:目标类,
在这里插入图片描述
2.AfterReturningAdvice:后置增强
在这里插入图片描述
3.ThrowsAdvice:异常增强
在这里插入图片描述
4.MethodInterceptor:环绕增强,目标方法执行之前以及之后做的增强处理
在这里插入图片描述
总结:
Spring AOP:Aspect Oriented Program 面向切面编程
几个重要概念:

1.切入点:需要把增强处理加在的位置;service层的方法上面;需要在配置文件中配置
2.增强处理:额外功能(公共功能) ,通知/建议(advice)
3.目标类:核心功能所在的类(原始类)
4.切面:把增强处理,放在切入点的位置,形成的一个概念
5.编织/织入:把增强处理放置在切入点的过程

AOP使用场景:
1.把功能内容抽取出来,形成advice;在配置文件中中做配置====>程序猿只关心核心功能;解决冗余
2.在原有功能基础之上,做功能扩展===>在不改变原有代码的基础上做功能扩展

AOP实现:代理模式的使用

代理类的产生原理
类加载ClassLoader
在这里插入图片描述

代理类的生成:由jdk动态代理生成
在这里插入图片描述

SpringAOP实现原理:

1.底层通过字节码技术,把目标对象以及额外功能动态封装,生成代理对象 ==>动态代理
使用了JDK动态代理以及cglib动态代理
2.为什么通过id得到的是代理对象
spring工厂创建对象之后,由BeanPostProcessor进行处理
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清如许.

整理不易,点滴助力就是不竭动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值