AOP动态代理的应用

概念

动态代理就是使用一个通用的类的模板(代理类)联系被代理类,使用此模板实现代理类的方法;
AOP(Aspect-Oriented Programming: 面向切面编程): 是一种一种编程范式,一种新的方法论, 是对传统 OOP(Object-Oriented Programming, 面向对象编程) 的补充.
内涵和模块化编程相同。

基本术语

关注点(Concern)
对软件工程有意义的小的、可管理的、可描述的软件组成部分,一个关注点通常只同一个特定概念或目标相关联。
主关注点(Core concern)
一个软件最主要的关注点。
关注点分离(Separation of concerns,SOC)
标识、封装和操纵只与特定概念、目标相关联的软件组成部分的能力,即标识、封装和操纵关注点的能力。
方法(Method)
用来描述、设计、实现一个给定关注点的软件构造单位。
横切(Crosscut)
两个关注点相互横切,如果实现它们的方法存在交集。
支配性分解(Dominant decomposition)
将软件分解成模块的主要方式。传统的程序设计语言是以一种线性的文本来描述软件的,只采用一种方式(比如:类)将软件分解成模块;这导致某些关注点比较好的被捕捉,容易进一步组合、扩展;但还有一些关注点没有被捕捉,弥散在整个软件内部。支配性分解一般是按主关注点进行模块分解的。
横切关注点(Crosscutting concerns)
在传统的程序设计语言中,除了主关注点可以被支配性分解方式捕捉以外,还有许多没有被支配性分解方式捕捉到的关注点,这些关注点的实现会弥散在整个软件内部,这时这些关注点同主关注点是横切的。
切面(Aspect):
在支配性分解的基础上,提供的一种辅助的模块化机制,这种新的模块化机制可以捕捉横切关注点。
连接点(Joinpoint)
在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。
切入点(Pointcut)
匹配连接点的断言。它通常是一个表达式,有专门的语法,用于指明在哪里(或者说在哪些方法调用上)嵌入横切逻辑
通知(Advice)
在切面的某个特定的连接点上执行的动作,也就是我们前面提到的横切逻辑,如日志处理逻辑,事务处理逻辑。
目标对象(Target Object)
被一个或者多个切面所通知的对象,也被称作被通知对象
代理对象(Proxy Object)
AOP框架创建的对象,它和目标对象遵循同样的接口,使用它的方式和使用目标对象的方式是一样的,但是它是目标对象的增强版,“通知”中的代码执行将会被代理对象的方法调用触发。在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。

优点

可以使用一个模板就操作所有的类,这样,我们如果要对所有类进行操作,只需对此模板进行操作,并使用此模板进行其它类的操作,这样,只要修改一个模板(代理类),就可以对所有的类实现修改的操作。(类比过滤器)

  • 降低模块耦合度
  • 使系统容易扩展
  • 更好的代码复用性

步骤

动态代理的实现主要有以下几大步

  • 确定被代理对象
  • 构造代理对象
  • 使用被代理对象调用代理对象中的方法

确定被代理对象

AOP动态代理中对对象方法的定义一般使用接口的形式,让实现类实现接口来构建我们定义的方法。

//在AOP中,对方法的定义一般使用接口的方式
package com.zzxtit.spring.aop.proxy;
import java.math.BigDecimal;
public interface 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值