静态代理的缺点:
1.当有多个类需要代理(业务需求不同时),那么就需要创建多个代理,同时创建多个代理对象去调用相应的方法
2.或者让一个代理类去实现多个接口,然后让代理创建的代理类需要重写全部的方法
动态代理
动态代理可以解决上述问题.
1.动态代理的代理对象时运行时动态产生,无需写多个代理对象
2.通过代理对象调用目标方法
3.动态代理产生代理对象的过程中,底层使用了反射
流程:
1.动态代理类需要实现InvocationHandler接口,重写invoke方法,它的返回值回一个代理对象,可以直接return method(被代理对象,args)
2.然后在main方法中去使用Proxy.newProxyInstance()方法,去创建一个动态代理类对象.
3.Proxy.newProxyInstance()方法需要传入三个值,分别是:
1)类加载器:ClassLoader.getSystemClassLoader(),
2)动态代理类需要实现的接口:new Class[]{接口.class}
3):new 动态代理类(被代理对象)