动态代理之Waiter案例

Waiter接口

package com.mango.demo2;

public interface Waiter {
	public void serve();
}

接口的实现类,ManWaiter

package com.mango.demo2;

public class ManWaiter implements Waiter {

	public void serve() {
		System.out.println("服务中...");
	}
}


Demo:


package com.mango.demo2;

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

import org.junit.Test;

import com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader;

public class Demo2 {
	@Test
	public void fun1(){
		
		ManWaiter manWaiter = new ManWaiter();
		
		ClassLoader loader = this.getClass().getClassLoader();
		Class[] interfaces = {Waiter.class};
		InvocationHandler h = new WaiterInvocationHandler(manWaiter);//参数manWaiter表示目标对象
		//得到代理对象,代理对象就是在目标对象的基础上进行了增强的对象
		Waiter waiterProxy = (Waiter) Proxy.newProxyInstance(loader, interfaces, h);
		waiterProxy.serve();
	}
}

class WaiterInvocationHandler implements InvocationHandler{
	
	private Waiter waiter;//目标对象
	
	public WaiterInvocationHandler(Waiter waiter){
		this.waiter = waiter;
	}

	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		
		System.out.println("你好");//增强
		this.waiter.serve();
		System.out.println("再见");//增强
		
		return null;
	}
	
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值