- 关于动态代理:
- 本质和装饰者模式差不多,本质上都是对接口实现的加强:
- 我们需要一个普通的接口:
1 | public interface Waiter { |
- 实现这个接口的方法:
1 | public class MyWaiter implements Waiter { |
- 对接口的实现类的加强
- 加强的方法主要是实现他的代理对象的接口的其中的一个接口InvocationHandler 动态处理器重写他的invoke 的方法,从而调用waiter的server方法之前都会先调用invoke的方法,从而对server 方法的加强。
1 | class MyInvocationHandler implements InvocationHandler { |
- 在主方法中调用这个方法:
1 | public class MainApp1 { |
- 普通的代理的方法的实现:
- 无论你实现接口中的任何一个方法都会调用invoke的方法
- 我们要对proxy的newproxyInstace参数进行说明:
- classloader 类加载器
- class[] 一个类的数组
- InvacationHander 动态处理器,实现这个接口的方法
1 | public static void main(String[] args) { |
- 想想一下:proxy会对你的接口塑造一个实现类的,而在实现类中的实现的方法里面会调用invoke的方法,所以invocationHander的invoke方法都会被调用
1 | class X implements MyInterface { |