动态代理的概念
首先来理解动态代理是什么?它能干什么?它的好处或者说优势是什么?
动态代理顾名思义就是动态地代理目标对象执行相应的操作,并且在之间进行功能增强,也就是在执行目标对象的方法同时加上其他需要的业务处理。作用是能代替目标对象执行目标对象的方法,达到调用者的目的同时,还可以进行功能增强的操作,加入其他的业务处理,如日志、验证等处理。
主要就是动态、代理两个词的理解。
动态 :指的是可以动态地代理多个目标对象,而不只是一个,是可以灵活的,所以是动态的。
代理 :指的是可以代替目标对象去执行目标对象要执行的方法,并且可以在不修改目标对象方法的同时加入自己需要的业务处理,也就是功能增强。
举个生活中的例子:比如你要租房找房子,那你就是那个目标对象,你要做的事情就是找房子,但是你可能不是自己亲自去找房子,而是去找中介帮你找房子,那中介就是代理对象,代理对象可以代替你去完成你需要做的事情(找到房子),而且在完成你的目标(找到房子)后,中介会向你收取费用(功能增强),这个本来不在你的目标之内,所以这个是代理对象额外加入的其他业务处理。这样代理对象就不仅完成了目标对象的事情,并可以在这期间中加入其他业务处理。
图解:
说完概念性的知识,现在来看下具体的例子。
需求:模拟计算器执行加减乘除运算
一个数学运算的接口:
package com.zhbit.proxy;
/**
* @author XieGuanPei
* @Description 数字计算接口
* @date 2020/9/2 - 6:26
*/
public interface Calculate {
int add(int i, int j);
int sub(int i, int j);
int mul(int i, int j);
int div(int i, int j);
}
实现类(目标类):
package com.zhbit.proxy;
/**
* @author XieGuanPei
* @Description 目标类
* @date 2020/9/2 - 6:24
*/
public class Calculator implements Calculate{
@Override
public int add(int i,int j) {
return i + j;
}
@Override