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(自行研究)
涉及网络编程
浙公网安备 33010602011771号