Java静态代理与动态代理
2016-01-18 10:49
465 查看
package com.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
interface ProductFactory{
public void productCloth();
}
class NikeProductFactory implements ProductFactory{
}
/**
* 静态代理
* @author lilei7
*
*/
class StaticProxy implements ProductFactory{
}
/**
* 动态代理
* @author lilei7
*
*/
class DynamicProxy implements InvocationHandler{
Object obj ;
public Object bindObject(Object obj){
this.obj = obj;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
}
}
public class TestProxy {
public static void main(String[] args) {
//静态代理测试方法
NikeProductFactory nike = new NikeProductFactory();
StaticProxy staticProxy = new StaticProxy(nike);
staticProxy.productCloth();
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
interface ProductFactory{
public void productCloth();
}
class NikeProductFactory implements ProductFactory{
@Override public void productCloth() { // TODO Auto-generated method stub System.out.println("this is nike productor"); }
}
/**
* 静态代理
* @author lilei7
*
*/
class StaticProxy implements ProductFactory{
private ProductFactory o ; public StaticProxy(ProductFactory o){ this.o=o; } @Override public void productCloth() { // TODO Auto-generated method stub System.out.println("this is proxy"); o.productCloth(); }
}
/**
* 动态代理
* @author lilei7
*
*/
class DynamicProxy implements InvocationHandler{
Object obj ;
public Object bindObject(Object obj){
this.obj = obj;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
}
@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub System.out.println(obj); return method.invoke(obj, args); }
}
public class TestProxy {
public static void main(String[] args) {
//静态代理测试方法
NikeProductFactory nike = new NikeProductFactory();
StaticProxy staticProxy = new StaticProxy(nike);
staticProxy.productCloth();
//动态代理测试方法 DynamicProxy dynamicProxy = new DynamicProxy(); Object o = dynamicProxy.bindObject(nike); ProductFactory factory = (ProductFactory)o; factory.productCloth(); }
}
相关文章推荐
- Java学习笔记(54)----------详解Java IO(全面)
- Java学习笔记(53)------------Annotation(注释)第二篇
- Java学习笔记(52)-----------Annotation(注释)第一篇
- 一个让你迅速理解Javabean的实例
- 【JAVA】IO流关闭顺序
- Eclipse利用Maven2搭建SpringMVC框架的Web工程
- Java学习笔记(50)-----------JDBC
- Java 8 中的 Streams API 详解
- Java学习笔记(49)------------异常处理机制
- Java学习笔记(48)------------泛型详解
- JAVA安装及‘Javac’ 不是内部或外部命令
- Java for Web学习笔记(十三):JSP(3)Directive
- eclipse错误:parseSdkContent failed Could not initialize class android.graphics
- java对象的四种引用
- Spring 2.0技术手册 -2 集合对象
- Spring MVC 4 学习4:Bean装配例子
- Java连接DB2
- MyEclipse中改变.jsp默认的设计图模式为jsp editor
- JavaMail发送邮件时常见错误
- 【JAVA/读书随笔】Chapter 22 算法效率