动态代理(上)

动态代理

  1. 只学一个方法
      方法的作用:在运行时,动态创建一组指定的接口的实现类对象!(在运行时,创建实现了指定的一组接口的对象)

interface A {
}

interface B {
}

Object o = 方法(new Class[]{A.class,B.class})
o它实现了A和B两个接口!


Object proxyObject = Proxy.newProxyInstance(ClassLoader classLoader, Class[] interfaces, InvocationHandler h);

  1. 方法作用:动态创建实现了interfaces数组中所有指定接口的实现类对象!
    参数;
  2. ClassLoader:类加载器!
  • 它是用来加载器的,把.class文件加载到内存,形成Class对象!
  1. Class[] interfaces:指定要实现的接口们
  2. InvocationHandler:代理对象的所有方法(个别不执行,getClass())都会调用InvocationHandler的invoke()方法。
package cn.itcast.demo1;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import org.junit.Test;

public class Demo1 {
	
	@Test
	public void fun1() {
		/*
		 * Proxy.newProxyInstance(loader, interfaces, h)
		 * 运行时,这个方法需要动态生成一个类,这个类实现了A,B接口,最终返回这个类的对象!
		 * 生成的这个类也需要加载到内存中的方法区中,谁来加载,当然是ClassLoader
		 * 三大参数:
		 * 1.ClassLoader loader = this.getClass().getClassLoader();
		 * 当初是谁加载的我,我现在把这个类加载器给你
		 * 
		 * 2.Class[] interfaces
		 *  他是要实现的接口们
		 *  
		 * 3.InvocationHandler
		 * 它是调用处理器,是一个接口,他只有一个方法invoke()
		 */
		ClassLoader loader = this.getClass().getClassLoader();
		
		InvocationHandler h = new InvocationHandler() {
			
			public Object invoke(Object proxy, Method method, Object[] args)
					throws Throwable {
				System.out.println("你好,动态代理!");
				return null;
			}
		};
		//使用三大参数创建代理对象!!!
		Object o = Proxy.newProxyInstance(loader, new Class[]{A.class,B.class}, h);
		
		//这说明,对象o对应的类(实现类),实现了接口A,B
		A a = (A)o;
		B b = (B)o;
		
//		a.a();
//		a.aa();
//		b.b();
//		b.bb();
		/*
		 * 你好,动态代理!
		 *	你好,动态代理!
		 *	你好,动态代理!
		 *	你好,动态代理!
		 */
		o.toString();
		o.equals(null);
		o.getClass();//不输出,不会调用invoke(),其底层是用c是实现的
		/*
		 * 你好,动态代理!
		 * 你好,动态代理!
		 */
		//总结:Object 的大部分方法和实现的接口中的方法都会调用invoke()
		
	}


}

interface A {
	public void a();
	public void aa();
}

interface B {
	public void b();
	public void bb();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值