码迷,mamicode.com
首页 > 其他好文 > 详细

Hadoop技术内幕HDFS-笔记5之动态代理

时间:2014-07-01 11:41:22      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:blog   java   使用   代码   io   new   

1.1.  java动态代理

java.lang.reflect包下的Proxy(创建代理对象)和InvocationHandler(调用转发)两个类

代理对象代表目标对象(target)执行相应的活动

静态代理:代理对象实现目标对象一致的接口,实现代理接口和调用转发 (不推荐使用)

在调用前后的附加逻辑,体现了代理对象的价值

代码示例:

1、	java动态代理接口

package proxy;

public interface BookDAO {
	//增加图书的实现
	public void addBook();
}

2、	创建实现类(目标类)

package proxy;

public class BookDAOImpl implements BookDAO {

	@Override
	public void addBook() {
		// TODO Auto-generated method stub
		System.out.println("增加图书的实现方法....");
	}
}
3、	创建代理类

package proxy;

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

//JDK动态代理类实现
public class BookDAOProxy implements InvocationHandler{

	//实际代理对象
	private Object target;
	
	//绑定委托对象并返回一个代理类
	public Object bind(Object target){
		this.target = target;
		//取得代理对象 
		//要绑定接口(这是一个缺陷,cglib弥补了这一缺陷)  
		return Proxy.newProxyInstance(
				this.getClass().getClassLoader(), 
				this.target.getClass().getInterfaces(), 
				this);
	}
	
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		// TODO Auto-generated method stub
		Object result = null;
		System.out.println("事务开始处理...");
		//执行方法
		result = method.invoke(target, args);
		System.out.println("事务结束处理...");
		return result;
	}
}
4、	测试类:

package proxy;

public class BookTest {

	public static void main(String[] args) {
		//获得一个动态代理类
		BookDAO proxy = (BookDAO) new BookDAOProxy().bind(new BookDAOImpl());
		//调用代理类的方法
		proxy.addBook();
	}
}

 

1.1.  java NIO(自行研究)

涉及网络编程

Hadoop技术内幕HDFS-笔记5之动态代理,布布扣,bubuko.com

Hadoop技术内幕HDFS-笔记5之动态代理

标签:blog   java   使用   代码   io   new   

原文地址:http://www.cnblogs.com/jsunday/p/3817459.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!