首页 > 代码库 > Hadoop技术内幕HDFS-笔记5之动态代理

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

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(自行研究)

涉及网络编程