实现简单的动态代理!
2008-06-07 08:52
302 查看
这两天对java的动态代理感兴趣,自己写了个最简单的代码,认识一下动态代理!
例子:
类列表:
MyObjec是执行类。
MyProxy 是我自己实现的动态代理类,这个类实现了InvocationHandler接口,关于这个借口的描述就不多说了,可以参照api文档!好像动态代理类都实现这个接口,我是这么理解的,呵呵!
Test 类是我的业务类
ITest 是我业务类的接口!
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class MyObject {
public static void main(String[] args) {
ITest test = new Test("kimi");
ITest t = new MyProxy().getProxy(test);
t.outPut();
}
}
class MyProxy implements InvocationHandler {
private ITest itest = null;
private Object test = null;
public synchronized ITest getProxy(Object o) {//用Factory的方式取代理实例,不知道做得对不对
if (itest == null) {
test = o;
itest = (ITest) Proxy.newProxyInstance(
this.getClass().getClassLoader(),
o.getClass().getInterfaces(),
this);
return itest;
} else
return itest;
}
public Object invoke(Object o, Method m, Object[] aguments) throws Throwable {
System.out.println("my Proxy start ok!!!");
return m.invoke(
test,
aguments);
}
}
class Test implements ITest {
private String name = null;
public Test(String name) {
this.name = name;
}
public void outPut() {
System.out.println("my Test start ok!!!" + String.format("%n") + "my name is :" + this.name);
}
}
interface ITest {
public void outPut();
}
最后,如有不妥当之处,请指示~!谢谢
例子:
类列表:
MyObjec是执行类。
MyProxy 是我自己实现的动态代理类,这个类实现了InvocationHandler接口,关于这个借口的描述就不多说了,可以参照api文档!好像动态代理类都实现这个接口,我是这么理解的,呵呵!
Test 类是我的业务类
ITest 是我业务类的接口!
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class MyObject {
public static void main(String[] args) {
ITest test = new Test("kimi");
ITest t = new MyProxy().getProxy(test);
t.outPut();
}
}
class MyProxy implements InvocationHandler {
private ITest itest = null;
private Object test = null;
public synchronized ITest getProxy(Object o) {//用Factory的方式取代理实例,不知道做得对不对
if (itest == null) {
test = o;
itest = (ITest) Proxy.newProxyInstance(
this.getClass().getClassLoader(),
o.getClass().getInterfaces(),
this);
return itest;
} else
return itest;
}
public Object invoke(Object o, Method m, Object[] aguments) throws Throwable {
System.out.println("my Proxy start ok!!!");
return m.invoke(
test,
aguments);
}
}
class Test implements ITest {
private String name = null;
public Test(String name) {
this.name = name;
}
public void outPut() {
System.out.println("my Test start ok!!!" + String.format("%n") + "my name is :" + this.name);
}
}
interface ITest {
public void outPut();
}
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class MyObject { public static void main(String[] args) { ITest test = new Test("kimi"); ITest t = new MyProxy().getProxy(test); t.outPut(); } } class MyProxy implements InvocationHandler { private ITest itest = null; private Object test = null; public synchronized ITest getProxy(Object o) {//用Factory的方式取代理实例,不知道做得对不对 if (itest == null) { test = o; itest = (ITest) Proxy.newProxyInstance( this.getClass().getClassLoader(), o.getClass().getInterfaces(), this); return itest; } else return itest; } public Object invoke(Object o, Method m, Object[] aguments) throws Throwable { System.out.println("my Proxy start ok!!!"); return m.invoke( test, aguments); } } class Test implements ITest { private String name = null; public Test(String name) { this.name = name; } public void outPut() { System.out.println("my Test start ok!!!" + String.format("%n") + "my name is :" + this.name); } } interface ITest { public void outPut(); }
最后,如有不妥当之处,请指示~!谢谢
最后,如有不妥当之处,请指示~!谢谢
相关文章推荐
- 简单的 JDK实现动态代理
- 通过CGLIB实现AOP的浅析(顺便简单对比了一下JDK的动态代理)
- 实现简单的动态代理!
- 代理模式及JDK动态代理(InvocationHandler)的简单实现与分析
- 动态代理实现规则的简单降级
- 通过动态代理(Proxy)实现的数据库连接池的创建连接与归还链接的操作的简单的实现流程
- 动态代理的实现1-简单实现
- JDK动态代理实现简单AOP--转
- 复习笔记:一个简单的动态代理实现
- Java动态代理之JDK实现和CGlib实现(简单易懂)火推笔记
- spring aop 手动实现简单的动态代理
- 利用JDK动态代理机制实现简单拦截器
- ava中代理,静态代理,动态代理实现原理简单易懂
- 静态代理和动态代理的简单实现
- JAVA动态代理 和 Spring AOP 4种通知的简单实现
- 使用动态代理实现一个简单web客户端
- java之动态代理简单实现
- Java静态代理和动态代理的简单代码实现。
- AOP动态代理的简单实现
- Java动态代理之JDK实现和CGlib实现(简单易懂)