java 动态代理

java 动态代理

  前面说过了代理模式(java代理模式),但那只是一个静态代理,在实际使用中作用也确实很大,但是作为一个懒惰的程序员是不能就此满足的。前面我们只有一个Java程序员,明天老板心情好了在招聘一个c程序员,然后公司越来办的越好,我们有了c++程序员,php,python,ruby,c#....然后他们都需要代理类,这样不停加下去是会累死人的。这个时候动态代理就华丽丽的登场啦。

作为老板是不可能给你们公司的每个程序员都配备一个助理的,通常我们只有一个助理,那么这里我们也希望只有一个代理就可以代理所有的程序员。那么这个多功能的助理就是动态代理啦。来看看动态代理的官方解释:我也没看过,自己查吧吐舌头


直入主题,我们先看看动态代理怎么写的:

public class MyProxy implements InvocationHandler{
	
	private Object subject;
	
	public MyProxy(Object object) {
		// TODO Auto-generated constructor stub
		this.subject = object;
	}

	@Override
	public Object invoke(Object object, Method method, Object[] args) throws Throwable {
		// TODO Auto-generated method stub
		method.invoke(subject, args);
		return null;
	}

}
当然这是一个最简单的写法,我把能省的都省了,具体功能可以定制,但是核心功能method.invoe()不能变,这里是一切的根本,也许这里有人好奇invoke了,没错 invoke  , 这里用了java的反射。关于java反射请看这片文章描述( java反射)。


现在来看看具体怎么用

	public void test2() {
		Coder javacoder = new JavaCoder();
		MyProxy coderProxy = new MyProxy(javacoder);
		
		Coder coder = (Coder) Proxy.newProxyInstance(coderProxy.getClass().getClassLoader(), 
				javacoder.getClass().getInterfaces(), coderProxy);
		
		coder.coding();
	}
运行一下看下结果:

java coder is coding...


啦啦啦 结果出来啦。这我省略了开会与发奖金,大家可以考虑自己怎么实现。


以上就是java的动态代理啦,看看很简单吧。当然java的动态代理绝不是这么简单的应用一下。具体做web开发的都应该知道web开发中使用的著名的spring,spring一大特色就是aop,关于aop的实现就与动态代理有着千丝万缕的联系,还有做过android开发的都知道android中许多service管理就是cs模式实现的,比如android中activity就是由activityManagerService管理的。那么activity是怎么和Service建立关系的呢,这里就用到了代理,只不过这里的代理比不是我们看上去的那么简单就实现的。这个原理以后我们会将到的。。。






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值