前言:Java中的动态代理是面向切面编程(AOP)的基础或者说是具体的形式,我们就来了解jdk中的动态代理的基本实现原理吧
使用的关键API为java.lang.reflect.Proxy
1.创建一个接口
public interface Eatable {
public void eat();
}
2.创建实现该接口的类
public class Person implements Eatable {
@Override
public void eat() {
System.out.println("我特别能吃");
}
}
以上就是要被代理的接口及其具体类,然后我们查阅jdkAPI中的java.lang.reflect.Proxy
Object java.lang.reflect.Proxy.newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) throws IllegalArgumentException它会为指定的接口(Eatable)中进行方法执行并通过执行器处理器(InvocationHandler)为实现该接口的类(Person)覆盖方法(Person.eat())进行代理进行代理,并返回代理对象(Proxy Instance),所以我们接下来这样做:
3.创建实现InvocationHandler的执行器处理器
public class proxyDemo implements InvocationHandler {
private Object obj;
public void setObj(Object obj) {
this.obj = obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("有句话不知当讲不当讲");
Object result = method.invoke(obj, args);
System.out.println("我厉害吧?");
return result;
}
}
其中:obj属性为代理的对象,invoke方法中的形参Method为该obj类实现接口中的方法,
4.最后,在测试代码中这样写
proxyFactory demo = new proxyFactory();
Person person = new Person();
demo.setObj(person);
Eatable proxy = (Eatable) Proxy.newProxyInstance(person.getClass().getClassLoader(),
person.getClass().getInterfaces(), demo);
proxy.eat();