java代理Demo——JDK动态代理

     java代理有jdk动态代理、cglib代理,这里只说下jdk动态代理,jdk动态代理主要使用的是java反射机制(既java.lang.reflect包)

    原理是(歌手、经纪人做例子):

         建立一个公共的接口,比如:歌手public interface Singer;

        用具体的类实现接口,比如:周杰伦,他是歌手所以实现Singer这个类,class MySinger  implements Singer

        建立代理类,这里也就是经纪人,他需要实现InvocationHandler类,并重写invoke方法

     这样当有什么事情,要找周杰伦(具体类)的时候,就必须先到经纪人(代理类)那里处理,代理人在决定要不要与你见面(该方法要不要执行)

1、歌手接口

public interface Singer {
	
	public abstract void sing();
	
	public abstract String s();
}


2、具体的歌手

public class MySinger implements Singer {

	public void sing() {
		// TODO Auto-generated method stub
		System.err.println("唱歌。。。。");
	}

}

3、代理类(经纪人)

 

public class agent implements InvocationHandler{

	public  Object target;
	
	//绑定
	public Object bind(Object target){
		this.target=target;
		//必须放回Proxy
		return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
	}
	
	//重新
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		Object o =null;
		System.out.println("开始事务");
		System.out.println("判断权限");
		
		 o = method.invoke(target, args);//执行方法
	
		System.out.println("结束事务");
		return o;
	}

}


 


 

 

4、测试(为什么要间接口能,下面你会发现代理返回的是他们的接口类,这要一个代理类,就可以代理多个类,只要该类是同个一个接口的是实现)

public class Test {
	public static void main(String[] args) {
		//
		agent a =new agent();
		Singer s= (Singer) a.bind(new MySinger());
		s.sing();
	}
}


 

 

由于本人还有半年毕业给自己做个小宣传,莫吐槽,谢谢!!!

name:牟云飞

tel:15562579597

email:1147417467@qq.com

address:山东中医药大学理工学院

 time:2012-11-27

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

牟云飞

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

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

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

打赏作者

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

抵扣说明:

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

余额充值