1.Spring AOP用的是哪种设计模式
- Aspect Oriented Programming (面向切面编程)
- 源码(JDK 动态代理和 CGLIB 动态代理)
2.谈谈你对代理模式的理解
- 代理模式是给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。
通俗的来讲代理模式就是我们生活中常见的中介。 - 设计思路是:定义一个抽象的委托角色,让代理角色和目标角色分别去实现它。
- 目标角色:实现委托角色,定义目标角色所要实现的业务逻辑,供代理角色调用。如歌星唱歌。
- 代理角色:实现委托角色,是目标角色的代理,通过目标角色的业务逻辑方法来实现抽象方法
在前后可以附加自己的操作,如谈合同,布置场地,收钱等。 - 代理模式分为静态代理和动态代理。
- 静态代理是我们自己创建一个代理类
- 动态代理是程序自动生成一个代理
举个栗子
:人将事情交给黄牛,就不用做第一和最后一步了,只负责付钱就行了
interface 交警大队{
void 处理违章();
}
class 人 implements 交警大队{
void 处理违章(){
交钱消分;
}
}
class 黄牛 implements 交警大队{
void 处理违章(){
黄牛帮忙开车去交警大队,约好,排队;
帮这个人交钱消分;
将车还回来;
}
}
-- 交警大队:委托类
-- 黄牛:代理类
-- 人:客户类(目标类)
3.代理模式的作用
- 中介隔离作用:
客户类不能直接引用委托对象,代理类对象可以在客户类和委托对象之间起到中介的作用,
特征是代理类和委托类实现相同的接口。 - 开闭原则,增加功能:
代理类可以增加额外的功能来扩展委托类的功能
封装委托类,若想给项目加入缓存、日志等公共服务功能,只需修改代理类,符合开闭原则。
代理类负责为委托类预处理消息、过滤消息、把消息转发给委托类,及事后对返回结果处理。
代理类本身并不真正实现服务,而是同过调用委托类的相关方法,来提供特定的服务。
真正的业务功能还是由委托类来实现,但是可以在业务功能执行的前后加入一些公共的服务。
4.有哪几种代理模式
- 1.静态代理
- 2.jdk动态代理
- 3.cglib动态代理
5.静态代理和动态代理有什么区别
- 都能实现相同的功能
- 动态代理对类做了进一步抽象和封装,复用性和易用性提升
- 代理创建时期不同。
静态代理是由程序员创建或特定工具自动生成源代码,再对其编译(在程序员运行之前,代理类.class文件就已经被创建了)
动态代理(Cglib)是在程序运行时通过反射机制动态创建的。
6.关于动态代理与AOP的关系
- AOP是一种思想,而动态代理是一种AOP思想的实现