AOP技术( 动吧项目添加缓存和用户日志)17

本文介绍了AOP技术在Spring中的应用,包括AOP的基本概念、工作原理、相关术语,以及Spring AOP的快速入门。通过示例展示了如何创建日志切面和缓存切面,解释了通知类型、切入点表达式和切面优先级。此外,还探讨了Spring中的异步操作和事务处理,提供了事务控制的配置和属性分析。
摘要由CSDN通过智能技术生成

AOP 技术的应用

使用AOP的三大方式
方式一:使用原生Spring API接口
方式二:自定义切面类
方式三:注解方式

AOP 技术简介

背景分析对于一个业务而言,我们如何在不修改源代码的基础上对对象功能进行拓展,例如现有一个公告(通知)业务:
interface NoticeService{ boolean send(String notice);}
在这里插入图片描述
需求:基于OCP(开闭原则-对扩展开放对修改关闭)设计方式对NoticeServiceImpl类的功能进行扩展,例如在send业务方法执行之前和之后输出一下系统时间
方案1:基于继承方式实现其功能扩展,关键设计如下
在这里插入图片描述
基于继承方式实现功能扩展的优势,劣势分析:1) 优势: 简单,容易理解.2) 劣势:不够灵活(只能直接一个接口下的子类)和稳定(父类一旦修改了其方法,所有子类都要改.)
方案2:基于组合方式实现其功能扩展,关键代码设计如下
在这里插入图片描述
基于组合方式实现功能扩展的优势,劣势分析:

  1. 优势: 灵活(可以为指定接口下的所有实现类做功能扩展),稳定(组合的具体对象发生变化,不会影响当前类)
  2. 劣势:相对继承而言不容易理解.
    总结:
    无论是继承,还是组合都是基于OCP方式实现了对象功能扩展,都有相应的优缺点,并且我们都要自己去写这些子类或兄弟类,在这些类中调用目标对象(父类或兄弟类对象)的方法以及扩展业务逻辑.对于这样的模板代码我们能否进行简化呢?例如.由框架实现其共性(创建目录类型的子类类型或兄弟类型),特性交给用户自己实现.

AOP 是什么?

AOP(Aspect Oriented Programming)是面向切面编程,是一种设计思想,它要在不改变原有目标对象的基础上,为目标对象基于动态织入的特定方式(可以是编译是的动态,也可以运行时的动态)进行功能扩展.我们可以将设计思想理解为OOP(面向对象编程)思想的补充和完善,OOP强调的一种静态过程(一个项目由哪些子系统构成,一个子系统有哪些模块,一个模块又由哪些对象构成,一个对象又有哪些属性和方法).AOP是一个动态过程,它要为设计好的对象在动态编译或运行时做服务增益,例如,记录日志,事务增强,权限控制等:

AOP 应用原理初步分析

AOP可以在系统启动时为目标类型创建子类或兄弟类型对象,这样的对象我们通常会称之为动态代理对象.如图所示:
在这里插入图片描述
其中:
为目标类型(XxxServiceImpl)创建其代理对象方式有两种(先了解):
第一种方式:借助JDK官方API为目标对象类型创建其兄弟类型对象,但是目标对象类型需要实现相应接口.
第二种方式:借助CGLIB库为目标对象类型创建其子类类型对象,但是目标对象类型不能使用final修饰.

AOP 相关术语概要分析

切面对象(Aspect):封装了扩展业务逻辑的对象,在spring中可以使用@AspectJ描述.
切入点(Pointcut): 定义了切入扩展业务逻辑的一些方法的集合(哪些方法运行时切入扩展业务),一般会通过表达式进行相关定义,一个切面中可以定义多个切入点的定义.
连接点(JoinPoint):切入点方法集合中封装了某个正在执行的目标方法信息的对象,可以通过此对象获取具体的目标方法信息,甚至去调用目标方法.
通知(Advice):切面(Aspect)内部封装扩展业务逻辑的具体方法对象,一个切面中可以有多个通知(例如@Around).
其中,切入点与连接点的分析,如图所示:
在这里插入图片描述
说明:我们可以简单的将机场的一个安检口理解为连接点,多个安检口为切入点,安全检查过程看成是通知。总之,概念很晦涩难懂,多做例子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值