代理详解
首先代理是什么,在现实生活中我们很常听见的代名词叫做代理商,我们买东西,可以自己去国外买,也可以通过代理商去国外买,我们找代理商买,在找代理商买的时候还能有某些优惠活动。代理类也就是类似于代理商。我们可以调用具体的实现类,也可以通过代理类,在代理类中再去调用具体的实现类方法,并且在调用具体方法前后进行一个增强活动。
代理分为了动态代理和静态代理。
1、静态代理
静态代理的实现方式:
1)定义一个接口
public interface Calculate{
int add(int num1,int num2);
}
2)定义一个委托类(被代理的类)
public class Calculator implements Calculate {
@Override
public int add(int num1, int num2) {
System.out.println(num1 + "+" + num2 + "=" + num1 + num2);
return num1 + num2;
}
}
3)定义一个代理类
public class CalculatorWithLog implements Calculate {
private Calculator calculator;
public CalculatorWithLog(Calculator calculator) {
this.calculator = calculator;
}
@Override
public int add(int num1, int num2) {
System.out.println("执行具体代码前保存日志");
int add = calculator.add(num1, num2);
System.out.println("执行具体代码前保存日志");
return add;
}
}
4)测试
public static void main(String[] args) {
Calculator calculator = new Calculator();
CalculatorWithLog calculatorWithLog = new CalculatorWithLog(calculator);
calculatorWithLog.add(2, 3);
}
静态代理实现总结: 主要是先有一个接口,接口里实现了某个方法,然后定义一个委托类,委托类实现了接口,对接口的方法进行重写具体方法的作用。最后定义一个代理类,代理类同样实现了接口并且它的成员对象就是委托类,在重写的方法中去调用委托类的具体方法,并且可以在方法前后做一个增强活动。
2、动态代理
参考:https://blog.csdn.net/hc1285653662/article/details/127199791