这两天对java的动态代理感兴趣,自己写了个最简单的代码,认识一下动态代理!
例子:
类列表:
MyObjec是执行类。
MyProxy 是我自己实现的动态代理类,这个类实现了InvocationHandler接口,关于这个借口的描述就不多说了,可以参照api文档!好像动态代理类都实现这个接口,我是这么理解的,呵呵!
Test 类是我的业务类
ITest 是我业务类的接口!
- importjava.lang.reflect.InvocationHandler;
- importjava.lang.reflect.Method;
- importjava.lang.reflect.Proxy;
- publicclassMyObject{
- publicstaticvoidmain(String[]args){
- ITesttest=newTest("kimi");
- ITestt=newMyProxy().getProxy(test);
- t.outPut();
- }
- }
- classMyProxyimplementsInvocationHandler{
- privateITestitest=null;
- privateObjecttest=null;
- publicsynchronizedITestgetProxy(Objecto){
- if(itest==null){
- test=o;
- itest=(ITest)Proxy.newProxyInstance(
- this.getClass().getClassLoader(),
- o.getClass().getInterfaces(),
- this);
- returnitest;
- }else
- returnitest;
- }
- publicObjectinvoke(Objecto,Methodm,Object[]aguments)throwsThrowable{
- System.out.println("myProxystartok!!!");
- returnm.invoke(
- test,
- aguments);
- }
- }
- classTestimplementsITest{
- privateStringname=null;
- publicTest(Stringname){
- this.name=name;
- }
- publicvoidoutPut(){
- System.out.println("myTeststartok!!!"+String.format("%n")+"mynameis:"+this.name);
- }
- }
- interfaceITest{
- publicvoidoutPut();
- }
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(); }
最后,如有不妥当之处,请指示~!谢谢
分享到:
相关推荐
Java实现简单动态代理连接池
Java实现动态代理的两种方式。 相对来说cglib更加方便。可以实现为实现接口的类(非final类)
本工程是对静态代理,动态代理的测试,并且实现了对jdk动态代理的简单模拟!
动态代理实现AOP机制,动态代理实现AOP机制,动态代理实现AOP机制,动态代理实现AOP机制
AOP的意思就是面向切面编程。本文主要是通过梳理JDK中自带的反射机制,实现 AOP动态代理模式,这也是Spring AOP 的实现原理
反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)
AOP动态代理描述了Spring AOP中使用Java高级技术功能实现的动态代理,为Spring IOC等高级开发实现了逻辑功能;
一个用CGlib实现Java动态代理的简单、完整的好例子!
这个是个人做的JAVA实现动态代理的笔记
Emit实现动态代理 参照java的动态代理的使用感觉实现C#版
分别使用jdk和cglib实现动态代理,包含UML图。还有相关的博客链接:http://blog.csdn.net/y_love_f/article/details/46345581.博客中有具体的代理解释
三种动态代理的实现(静态,jdk,cglib),jdk动态代理是由java内部的反射机制来实现的,cglib动态代理底层则是借助asm来实现的
结合spring框架实现的动态代理代理,spring,Proxy
用Java动态代理实现AOP,讲的很好(用Java动态代理实现AOP)
JDK和CGlib分别实现的动态代理源代码
需求大致如下:通过url传参的方式,让Nginx代理到不同的服务器 浏览器输入:http://127.0.0.1/remote?port=8081被代理到:http://192.168.108.2:8081
详细介绍了开发java动态代理用到的相关类,和动态代理类的特点!最后以完整示例代码的形式,展现了java动态代理开发的过程!
简单代码实现虚拟和动态代理 代码里面有详细的说明 一看就知道其中的区别 。。。。。。。。。。。。。。。。。。。。
JAVA动态代理实现Demo(JDK动态代理和CGLIB动态代理)
ioc框架,通过动态代理实现.可以参考学习下