一.什么是动态代理
动态代理:不需要生成代理类 分为jdk动态代理 和 CGLIB动态代理
二.jdk动态代理作用
通过反射虚拟化代理对象
(不需要生成代理类)
实现InvocationHandler 就可以了。
package com.edu.emple4;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* @author shkstart
* @date 2019/6/12- 18:26
*/
interface Hose{
void maifang();
}
class YuShengJun implements Hose {
@Override
public void maifang() {
System.out.println("我是于胜军,开始买房");
}
}
//jdk动态代理
class JdkProxy implements InvocationHandler{
private Object target;
JdkProxy(Object target){
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("我是中介,买房交给我");
Object invoke = method.invoke(target, args);
System.out.println("我是中介,买房结束");
return invoke;
}
}
public class Test007 {
public static void main(String[] args) {
YuShengJun yuShengJun = new YuShengJun();
JdkProxy jdkProxy = new JdkProxy(yuShengJun);
Hose o = (Hose) Proxy.newProxyInstance(yuShengJun.getClass().getClassLoader(), yuShengJun.getClass().getInterfaces(), jdkProxy);
o.maifang();
}
}
结果: