//对于接口不编写实现类,直接创建某个interface 的实例
//通过接口的字节码增强方式创建的类而构造出来的,它是一个临时构造的实现类的对象
/*
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h) {
*/
//第一个参数是class加载器,第二个是接口列表,这两个决定了什么类的什么接口
//第三个是InvocationHandler绝定了功能,
// InvocationHandler作用就是,
// 当代理对象的原本方法被调用的时候,会绑定执行一个方法,
// 这个方法就是InvocationHandler里面定义的内容,同时会替代原本方法的结果返回。
//InvocationHandler接收三个参数
//proxy,代理后的实例对象。
//method,对象被调用方法。
//args,调用时的参数
InvocationHandler handler = new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println(method);
if (method.getName().equals("morning"))
{
System.out.println(args[0]);
}
return null;
}
};
World w = (World) Proxy.newProxyInstance(
World.class.getClassLoader(),
new Class[] {World.class},
handler
);
w.morning("123");
}
}
interface World
{
void morning(String name);
}
/*
动态代理实际上是JDK在运行期动态创建class字节码并加载的过程
public class HelloDynamicProxy implements Hello {
InvocationHandler handler;
public HelloDynamicProxy(InvocationHandler handler) {
this.handler = handler;
}
public void morning(String name) {
handler.invoke(
this,
Hello.class.getMethod("morning"),
new Object[] { name });
}
}
*/
java(7)-反射之动态代理
猜你喜欢
转载自blog.csdn.net/qq_43410618/article/details/104411049
今日推荐
周排行