Spring之AOP

AOP是一种思想:在不影响原来业务类情况下,实现动态增强

而Spring中的AOP是基于动态代理实现的,即 JDK动态代理和Cglib动态代理。动态代理可以基于接口(JDK)或者类(cglib),如果是类就是cglib,spring默认是JDK。

本文阐述关系:动态代理实现AOP,AOP应用在声明式事务。

动态代理

有没有可能不编写实现类,直接在运行期创建某个interface的实例呢?

这是可能的,因为Java标准库提供了一种动态代理(Dynamic Proxy)的机制:可以在运行期动态创建某个interface的实例
什么叫运行期动态创建?听起来好像很复杂。所谓动态代理,是和静态相对应的。我们来看静态代码怎么写:
在这里插入图片描述
还有一种方式是动态代码,我们仍然先定义了接口Hello,但是我们并不去编写实现类,而是直接通过JDK提供的一个Proxy.newProxyInstance()创建了一个Hello接口对象。这种没有实现类但是在运行期动态创建了一个接口对象的方式,我们称为动态代码。JDK提供的动态创建接口对象的方式,就叫动态代理。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

什么是AOP

在这里插入图片描述
在这里插入图片描述

AOP在Spring中的作用(声明式事务)

编程式事务:所谓编程式事务指的是通过编码方式实现事务,即类似于JDBC编程实现事务管理。管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。
在这里插入图片描述

声明式事务:管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于注解的方式),便可以将事务规则应用到业务逻辑中,这样spring容器就会自动的扫描声明过的方法,自动的加入事务的开启 提交 回滚 操作。我们可以更加专注于我们的业务逻辑。。

Spring使用AOP来完成声明式的事务管理,因而声明式事务是以方法为单位,Spring的事务属性自然就在于描述事务应用至方法上的策略,在Spring中事务属性有以下四个参数:

1.传播行为

2.隔离级别

3.只读提示

4.事务超时时间
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
我们不用动态代理来实现AOP,而是用Spring来实现
在这里插入图片描述
在这里插入图片描述
把所有类交给spring管理(注册到spring)
切入点

日志做日志的事情,业务做业务的事情,没有干扰,通过spring进行aop切入–在哪个地方执行哪个方法
方式一:通过原生spring的API接口实现aop【主要是通过实现SpringAPI接口实现】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
方式二:自定义来实现AOP【主要是切面定义】
自定义一个类实现了一个前置增强和后置增强方法作为一个切面
切面里的方法就是通知
把切面切入到切入点(切入点就是切面的方法要插入的位置,即把切面的通知放在切入点的前后位置处)

自定义一个类,通过配置他就可以作为切面
在这里插入图片描述
前面第一种方式没有切面,只需要定义一个类实现它的接口,他就知道在哪执行了

横切关注点:与我们业务逻辑无关的,但是我们需要关注的部分,就是横切关注点。如日志 , 安全 , 缓存 , 事务等等 …(日志就是我们的横切关注点)

切面(ASPECT):横切关注点被模块化成的一个类。

通知(Advice):切面中的方法。

目标(Target):被通知对象。

代理(Proxy):向目标对象应用通知之后创建的对象。

切入点(PointCut):切面通知 执行的 “地点”的定义。(即在哪个地方执行)

连接点(JointPoint):与切入点匹配的执行点。
方式三:使用注解方式实现AOP
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值