Java笔记-- AOP 概述--2021-08-18

11 篇文章 0 订阅

一、AOP字面解释

AOP(Aspect Orient Programming)面向切面编程,是一个规范,是动态代理的一个规范化和标准,面向切面编程是从动态角度考虑程序运行过程

上面最后一句解释很抽象,现在 拆分 解释:
Aspect: 切面:给你的目标类增加的功能,就是切面。 像上面用的日志,事务都是切面。
Orient:面向, 对着。
Programming:编程

所以可以解释为:

比如我们以前业务代码一个添加逻辑中让让会有带有日志记录、事务的代码,同样删除业务中也会有,这导致我们业务逻辑和非业务逻辑耦合度高,不易修改。利用AOP可以对业务逻辑的各个部分进行隔离,把我们的日志记录、事务的代码提取出来,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

切面的特点: 一般都是非业务方法,独立使用的。

二、AOP的底层

AOP 底层,就是采用(基于)动态代理模式实现的。可以使用jdk,cglib两种代理方式:
JDK 的动态代理

使用jdk中的Proxy,Method,InvocaitonHanderl创建代理对象。
jdk动态代理要求目标类必须实现接口

CGLIB的动态代理

第三方的工具库,创建代理对象,原理是继承。 通过继承目标类,创建子类。
子类就是代理对象。 要求目标类不能是final的, 方法也不能是final的

动态代理的作用

1)在目标类源代码不改变的情况下,增加功能。
2)减少代码的重复
3)专注业务逻辑代码
4)解耦合,让你的业务功能和日志,事务非业务功能分离。

Aop就是动态代理的规范化, 把动态代理的实现步骤,方式都定义好了, 让开发人员用一种统一的方式,使用动态代理。

三、怎么理解面向切面编程

1)需要在分析项目功能时,找出切面。
2)合理的安排切面的执行时间(在目标方法前, 还是目标方法后)
3)合理的安全切面执行的位置,在哪个类,哪个方法增加增强功能

3.1 术语

1)Aspect:切面,表示增强的功能, 就是一堆代码,完成某个一个功能。非业务功能,常见的切面功能有日志, 事务, 统计信息, 参数检查, 权限验证。
2)JoinPoint:连接点 ,连接业务方法和切面的位置。 就某类中的业务方法
3)Pointcut:切入点 ,指多个连接点方法的集合。多个方法
4)目标对象,给哪个类的方法增加功能, 这个类就是目标对象
5)Advice:通知,通知表示切面功能执行的时间。

3.2 要素

1)切面的功能代码,切面干什么
2)切面的执行位置,使用Pointcut表示切面执行的位置
3)切面的执行时间,使用Advice表示时间,在目标方法之前,还是目标方法之后。

四、AOP的实现

上面有讲 aop是一个规范,是动态的一个规范化,一个标准
它有两个aop的技术实现框架:
1.spring:

spring在内部实现了aop规范,能做aop的工作。

spring主要在事务处理时使用aop。

我们项目开发中很少使用spring的aop实现。 因为spring的aop比较笨重。

2.aspectJ:

一个开源的专门做aop的框架。spring框架中集成了aspectj框架,通过spring就能使用aspectj的功能。

  aspectJ框架实现aop有两种方式:
	1.使用xml的配置文件 : 配置全局事务
	2.使用注解,我们在项目中要做aop功能,一般都使用注解, aspectj有5个注解。下一个文章讲
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

张德帅-001

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值