注解+动态代理的一个实例.doc_第1页
注解+动态代理的一个实例.doc_第2页
注解+动态代理的一个实例.doc_第3页
注解+动态代理的一个实例.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学习下动态代理模式(关于代理的基础只是有很多帖子都有我就不重复了),做了个注解动态代理的例子,给那些学习注解或动态代理的初学者。花了将近1小时,没做个什么优化,大牛勿喷。几个主要的类:注解类:package test2;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;Retention(RetentionPolicy.RUNTIME) Target(ElementType.METHOD)public interface ProxyTag public Class proxyClass(); 代理类父类: import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public abstract class ProxyBean implements InvocationHandlerprivate Object o;private ProxyBean proxyBean;private String methodName;public Object bind(Object obj,ProxyBean proxyBean,String methodName)this.o = obj;xyBean = proxyBean;this.methodName = methodName;return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);public Object invoke(Object proxy, Method method, Object obj)throws Throwable if(method.getName().equals(methodName)proxyBean.before();Object result = method.invoke(o, obj);proxyBean.after();return result;elseObject result = method.invoke(o, obj);return result;public abstract void before();public abstract void after();代理工厂:import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class ProxyFactory public static T getProxyBean(Class clazz)T t = (T) newInstance(clazz);Method methods = clazz.getMethods();for(int i=0;imethods.length;i+)ProxyTag pt = methodsi.getAnnotation(ProxyTag.class);if(pt = null)continue;ProxyBean pb = (ProxyBean) newInstance(xyClass();t = (T) pb.bind(t, pb, methodsi.getName();return t;private static Object newInstance(final Class clazz)try Constructor cons = clazz.getConstructor();return cons.newInstance(new Class); catch (SecurityException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (NoSuchMethodException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IllegalArgumentException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (InstantiationException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IllegalAccessException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (InvocationTargetException e) / TODO Auto-generated catch blocke.printStackTrace();return null;测试类:package test2;public class ProxyClass extends ProxyBeanpublic void after() System.out.println(after.);public void before() System.out.println(before.);public class ProxyClass2 extends ProxyBeanpublic void after() System.out.println(after2.);public void before() System.out.println(before2.);public interface IDemo public void sayHello();public void sayHello2();public class Demo implements IDemoProxyTag(proxyClass=ProxyClass.class)public void sayHello()System.out.println(hello.);ProxyTag(proxyClass=ProxyClass2.class)public void sayHello2()System.out.println(hello2.); public class Test /* * param args */public static void main(String

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论