15.6动态代理(血干JAVA系列)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

【例 15.23]定义 MylnvocationHandler 的类
【例15.24】定义接口
【例15.25】定义真实主题实现类
【例15.26]测试动态代理
package file;

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

//定义 Subject 接口
interface Subject
{ 			
	public String say(String name,int age); //定义抽象方法 say 
}
interface Subject1
{
	public String say1(String name);
}
//真实主题实现类
class RealSubject implements Subject,Subject1
{
	public String say(String name, int age)
	{ 
		return "姓名:" + name +",年龄:"+ age; 
	}
	public String say1(String name)
	{ 
		return "姓名:" + name; 
	}
}

class MyInvocationHandler implements InvocationHandler
{
	private Object obj;//真实主题
	public Object bind(Object obj)//绑定真实主题 
	{
		this.obj = obj;
		//取得代理对象
		return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(), this); 
	}
	
	//动态调用方法
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable 
	{
		Object temp =method.invoke(this.obj,args);//调用方法,传入真实主题和参数     
		return temp;//返回方法的返回信息
	}
	
}
public class demo 
{
	public static void main(String[] args) throws Exception
	{		
		//实例化代理操作类
		MyInvocationHandler handler = new MyInvocationHandler();
		//绑定真实对象
		Subject sub = (Subject) handler.bind(new RealSubject());
		Subject1 sub1 = (Subject1) handler.bind(new RealSubject());
		//通过动态代理调用方法
		String info = sub.say("李四", 22);
		String info1 = sub1.say1("zhangsan");
		System.out.println(info);
		System.out.println(info1);
	}
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿斯卡码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值