Java实现简单的动态代理

package com.base.proxy;


/**
 * 一个定义功能的接口
 */
public interface Star {
	String sing(String name);
	String dance(String name);
}
package com.base.proxy;

/**
 * 实现接口的功能类
 */
public class LDH implements Star {

	@Override
	public String sing(String name) {
		// TODO Auto-generated method stub
		return "大家好,接下来我要演唱"+name+"...谢谢观看";
	}

	@Override
	public String dance(String name) {
		// TODO Auto-generated method stub
		return "大家好,接下来我要跳"+name+"...谢谢观看";
	}

}
package com.base.proxy;

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

/**
 * 创建生成代理对象的代理类
 */
public class LDHProxy {
	
	//要代理的对象
	private Star ldh = new LDH();
	
	/**
	 * 生成代理类对象的方法
	 */
	public Star getProxy(){
		
		//返回一个代理对象
		return (Star)Proxy.newProxyInstance(LDHProxy.class.getClassLoader(), ldh.getClass().getInterfaces(), 
				new InvocationHandler() {
					@Override
					public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
						// TODO Auto-generated method stub
						
						if( method.getName().equals("sing") ){
							System.out.println("我是代理类");
							return method.invoke(ldh, args);
						}
						
						if( method.getName().equals("dance") ){
							System.out.println("我是代理类");
							return method.invoke(ldh, args);
						}
						
						return null;
					}
				}
				);
	}
}
package com.base.proxy;

public class TestProxy {
	
	public static void main(String[] args) {
		
		//创建一个代理类,该代理类
		LDHProxy ldhProxy = new LDHProxy();
		
		//返回一个代理对象
		Star star = ldhProxy.getProxy();
		
		//访问代理对象的方法自动调用代理对象的invoke方法
		String str1 = star.dance("广场舞");
		System.out.println(str1);
		
		//访问代理对象的方法自动调用代理对象的invoke方法
		String str2 = star.sing("卡路里");
		System.out.println(str2);
	}
	
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值