栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring之AOP

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/657936.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号