JDK动态代理
1、创建接口
package proxy;
public interface Person {
public void findLove();
public void findJob();
}
2、创建实现类
package proxy.jdk;
import proxy.Person;
public class XiaoMing implements Person {
@Override
public void findLove() {
System.out.println("寻找白富美");
}
@Override
public void findJob() {
System.out.println("活儿少钱多离家近");
}
}
3、创建代理类:
package proxy.jdk;
import proxy.Person;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* JDK代理
*/
public class JDKProxy implements InvocationHandler {
//被代理的对象
private Person target;
public Object getProxy(Person target){
this.target=target;
Class<?> clazz=target.getClass();
//生成代理对象
return Proxy.newProxyInstance(clazz.getClassLoader(),clazz.getInterfaces(),this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("这里是珍爱网,已拿到你的要求,帮你寻找真爱");
method.invoke(this.target,args);
System.out.println("有情人终成眷属");
return null;
}
}
4、测试:
package proxy.jdk;
import proxy.Person;
import sun.misc.ProxyGenerator;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class JDKTest {
public static void main(String[] args) {
Person xiaoming =new XiaoMing();
Person person=(Person) new JDKProxy().getProxy(xiaoming);
System.out.println(person.getClass());
person.findLove();
}
}
运行结果如下:
通过JDK实现的动态代理,被代理类需要实现一个接口