最近在学习spring的aop技术时,接触到的代理技术,在某些场合下还是挺好用的,记录下自己学习代理技术的过程,以便日后复习查阅。
本文思路:
一、什么是代理
二、JDK代理特点与使用
三、CGLIB代理特点与使用
一、什么是代理(Proxy)
public class UserDao {
public void addUser(){
System.out.println("添加用户");
};
public void queryUser(){
System.out.println("更新用户");
}
}
class ProductDao{
public void addProduct(){
//System.out.println("进入add方法了")
System.out.println("添加商品");
};
public void queryProduct(){
System.out.println("更新商品");
}
}
代理的一个用处就是使代码复用性增强。
业务要求:现在有两个Dao,每个Dao里面有若干个方法,这个每个Dao里有两个方法,我现在要截取addXXX()的方法,只要是addXXX()的方法,就要打印出日志信息。
解决办法:手动在每个Dao里addXXX()方法里打印日志信息。
弊端:如果现在有十个Dao,或者更多的Dao,每个Dao里手动添加日志信息将会变得很麻烦,但究其业务只是打印一句话而已。为了解决这个代码重复性高的问题,我们可以 用到代理技术。
原理:将复用代码,这里是打印日志信息放到代理对象里,代理对象是被代理对象的经纪人,帮它处理特殊的事情。