Spring11_AOP_JDKProxy
[静态代理虽然实现了解耦,但是还是把代码写死了,不利用重用和修改]
动态代理类
-
目标类对象
-
构造器
-
Object getProxy()方法
-
返回结果:一个动态代理对象的实例
- Proxy.newProxyInstance()
- 反射实现
-
Proxy.newProxyInstance()的参数
ClassLoader loader = ProxyFactory.class.getClassLoader(); Class[] interfaces = target.getClass().getInterfaces(); InvocationHandler h = new InvocationHandler() { invoke() }
- 类加载器
- 实现接口
- 重写方法怎么去实现
-
Object invoke()方法的一个解释
-
最终还是去调用目标类的方法,目标类和代理类都要实现接口
-
Object invoke()的参数
Object invoke(Object proxy, Method method, Object[] args) throws Throwable { method.invoke(target,args) return}
- proxy代理对象
- methed重写的方法
- args方法参数列表
动态代理的两种方式
- jdk代理,要求必须有接口,最终生成的动态代理类会目标对象类实现相同的接口,代理类在com.sun.proxy包下,类名为$proxy2
- cglib代理,最终生成的代理类会继承目标对象类,它们在同一包下