Java 动态代理 Proxy
2011-01-12 11:05
323 查看
spring的AOP的感念是个深奥而又浅显的功能,说他深奥是因为他把一切都封装很好。方便了我们做程序的人员的应用。我们大家就可以不用思想直接使用了。说他浅显是因为他就是java的Proxy的一个实现。以前,我只是知道这么一个概念,想我这样的一个非计算机专业的毕业,学习了4年教育学的人并且吃软件开发这碗的人来说,不干尝试。后来一想既然已经做了这个行业,那就好好做下去。相信明天会更好。好了废话不说完开始正题!
下面我们来写一个自己的ArrayList名字就叫MyArrayList,他的实现和ArrayList是一样的,代码如下
创造这类,就是让我以后生成这个类的代理类。java的代理Proxy必须是实现过接口的类。这是一个基本上可以说是一个硬性的规定。然后我们要创建一个类,我们实现这个proxy就是让我们在我们自己创建的类执行其各种方法时,通过代理类计算出方法的执行时间。
第一个的接口本来是不是必须的,但为了我们的程序更加的面向接口,和保持一个良好的java编程习惯我们还是定义了一个接口,然后我们来实现这个接口。下面呢的是ListProxy类的实现
通过这个类,我们可以返回一个代理类。最后是一个测试类
下面我们来写一个自己的ArrayList名字就叫MyArrayList,他的实现和ArrayList是一样的,代码如下
package com.csdn.exam.third; import java.util.ArrayList; import java.util.List; @SuppressWarnings({ "unchecked", "serial" }) public class MyArrayList extends ArrayList implements List{ /* * 自己定义的MyArrayList 实现了List接口 同时 和ArrayList方法完全一致 */ }
创造这类,就是让我以后生成这个类的代理类。java的代理Proxy必须是实现过接口的类。这是一个基本上可以说是一个硬性的规定。然后我们要创建一个类,我们实现这个proxy就是让我们在我们自己创建的类执行其各种方法时,通过代理类计算出方法的执行时间。
package com.csdn.exam.third; public interface ArrayListProxy { void beWork(); void enWork(); }
package com.csdn.exam.third; /* * 定义一个代理方法执行类 */ public class ArrayListProxyImpl implements ArrayListProxy { private long beTime; /** * 方法执行前 执行的方法 */ public void beWork() { // TODO Auto-generated method stub this.beTime=System.currentTimeMillis(); } /** * 方法执行后 执行的方法 */ public void enWork() { // TODO Auto-generated method stub System.out.println(System.currentTimeMillis() - this.beTime); } }
第一个的接口本来是不是必须的,但为了我们的程序更加的面向接口,和保持一个良好的java编程习惯我们还是定义了一个接口,然后我们来实现这个接口。下面呢的是ListProxy类的实现
package com.csdn.exam.third; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * 代理类 产生代理ArrayList * @author tianzhw * */ public class ListProxy { @SuppressWarnings("unchecked") public Object proxy(final Object trage,final ArrayListProxy arrayListProxy) { return Proxy.newProxyInstance(trage.getClass().getClassLoader(), trage.getClass().getInterfaces(), new InvocationHandler(){ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub arrayListProxy.beWork(); Object obj=method.invoke(trage, args); System.out.print("执行"+method.getName()+"方法,用时"); arrayListProxy.enWork(); return obj; } }); } }
通过这个类,我们可以返回一个代理类。最后是一个测试类
package com.csdn.exam.third; import java.util.List; public class test { /** * 测试类 */ @SuppressWarnings("unchecked") public static void main(String[] args) { // TODO Auto-generated method stub ListProxy proxy = new ListProxy();// 创建代理类对象 List list = (List) proxy.proxy(new MyArrayList(), new ArrayListProxyImpl());// 通过代理类 创建MyArrayList对象的代理 list.add("123"); list.size(); } }
相关文章推荐
- Java的动态代理Proxy以及Mybatis的原理
- java动态代理和Proxy运用
- Java的动态代理Proxy
- Java利用Proxy实现动态代理
- java 动态代理深度学习(Proxy,InvocationHandler),含$Proxy0源码
- java动态代理Proxy
- java 动态代理深度学习(Proxy,InvocationHandler)
- Java动态代理一——动态类Proxy的使用
- JAVA的Proxy动态代理在自动化测试中的应用
- java动态代理原理(Proxy,InvocationHandler),含$Proxy0源码
- java动态代理模式Proxy之JDK动态代理机制
- 43、Java动态代理一——动态类Proxy的使用
- java动态代理原理(Proxy,InvocationHandler),含$Proxy0源码
- Java基础学习总结——动态代理技术(Proxy)
- 【JavaWeb-14】代理Proxy、动态代理、AOP编程思想、注解、元注解、类加载器
- Java动态代理一------动态类Proxy的使用
- Java设计模式Proxy之动态代理
- java动态代理Proxy实现
- Android插件化开发基础之Java动态代理(proxy)机制的简单例子
- Java设计模式—Proxy动态代理模式