代理模式介绍
•
对一个类的功能进行增强或对类中的方法进行拦截
•
应用场景:要增强一个类或方法,但不能修改原来的类代码。
如:对业务类中每个方法添加日志记录的功能,使用代理模式给每个方法添加了日志,又没有修改原来的业务代码。
代理模式的组成
JDK动态代理
作用:
对目标对象的方法进行增强
类:
class UserServiceImpl{
public void save(){
保存用户到数据库
}
}
写日志的这些代码不应该写在目标对象的方法,而应该写在代理类中。
应用场景:
日志记录
事务控制
性能监控代码等
特点:
减少重复代码,让代码复用性好,跟具体业务无关的!
实现的两种方式
1.
JDK
代理,以前学习的就是这种
2.
CGLIB
代理
(Code Generation Library Code
生成类库
)
,今天要学习的内容
JDK代理
•
因为这个代理类由JDK自带的,类名是Proxy
•
JDK
代理的不足:代理类必须要有实现的接口
CGLIB动态代理
CGLIB
代理特点
cglib是一个强大的高性能的代码生成包,它可以在运行期扩展java类或实现java接口,它广泛的被许多AOP的框架使用,为他们提供方法的拦截。如果一个类并没有实现任何的接口,则无法使用上面所说的JDK动态代理,这时需要使用CGLIB代理,本质上是对原有类的继承,子类重写相应的方法。
导入
CGLIB
代理的包
1.
直接引入
Spring-Core
核心包就可以,已经包含
cglib
功能
2.
在
spring-core
中依赖的
jar
包中就包含了
cglib