动态代理的实现3-实现aop功能的封装和配置 .
2012-07-20 15:32
483 查看
//一个通告或建议的接口 public interface Advice { void afterMethod(Method method); void beforeMethod(Method method); } public class MyAdvice implements Advice{ private long start; @Override public void afterMethod(Method method) { System.out.println("运行时间计算结束!!"); System.out.println("共耗时:"+(System.currentTimeMillis()-start)); System.out.println("------------------------"); } @Override public void beforeMethod(Method method) { System.out.println("开始计算运行时间:"); start=System.currentTimeMillis(); System.out.println("所执行的方法:"+method.getName()); } } Properties文件的配置 #xxx=java.util.ArrayList xxx=aopframework.ProxyFactoryBean xxx.advice=aopframework.MyAdvice xxx.target=java.util.ArrayList /** * 负责创建目标类或代理类的实例对象,并通过配置文件实现切换 * */ public class BeanFactory { private Properties prop; public BeanFactory(InputStream is){ prop=new Properties(); try {prop.load(is); } catch (IOException e) { e.printStackTrace(); } } public Object getBean(String propkey){ String className=prop.getProperty(propkey); Object bean=null; try { bean=Class.forName(className).newInstance(); if(bean instanceof ProxyFactoryBean){ String adviceName=prop.getProperty(propkey+".advice"); String targetName=prop.getProperty(propkey+".target"); try { Advice advice = (Advice) Class.forName(adviceName).newInstance(); Object target = Class.forName(targetName).newInstance(); ProxyFactoryBean beanproxy=(ProxyFactoryBean)bean; beanproxy.setAdvice(advice); beanproxy.setTarget(target); bean=beanproxy.getProxy(); } catch (Exception e) { e.printStackTrace(); } } } catch (Exception e) { e.printStackTrace(); } return bean; } } /** * 充当封装生成动态代理的工厂 */ public class ProxyFactoryBean { private Advice advice; private Object target; public Object getProxy() { Object coll=(Object) Proxy.newProxyInstance( target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler(){ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { advice.beforeMethod(method); Object obj=method.invoke(target, args); advice.afterMethod(method); return obj; } }); return coll; } public Advice getAdvice() { return advice; } public void setAdvice(Advice advice) { this.advice = advice; } public Object getTarget() { return target; } public void setTarget(Object target) { this.target = target; } } public class Test { public static void main(String[] args) { InputStream is=Test.class.getClassLoader().getResourceAsStream("config.properties"); BeanFactory factory=new BeanFactory(is); Collection coll=(Collection) factory.getBean("xxx"); coll.add("aaa"); coll.add("222"); System.out.println(coll.size()); } /** * 运行结果 开始计算运行时间: 所执行的方法:add 运行时间计算结束!! 共耗时:0 ------------------------ 开始计算运行时间: 所执行的方法:add 运行时间计算结束!! 共耗时:0 ------------------------ 开始计算运行时间: 所执行的方法:size 运行时间计算结束!! 共耗时:0 ------------------------ 2 */ }
原文(本文转自):http://blog.csdn.net/wxwzy738/article/details/7705627
相关文章推荐
- 动态代理的实现3-实现aop功能的封装和配置
- 让动态生成的类成为目标类的代理-实现AOP功能的封装与配置
- 动态代理的实现3-实现aop功能的封装和配置
- 加强2注解。泛型。类加载器及其委托机制。代理的概念与作用原理,AOP概念。实现AOP功能的封装与配置。类似Spring。
- 实现AOP功能的封装和配置
- 实现AOP功能的封装与配置的小框架
- 黑马程序员--09.动态与代理AOP--06【动态代理实例化的过程升级--目标对象+系统功能的参数化】【实现类似Spring的可配置AOP框架】
- JDK核心API:使用动态代理实现AOP功能
- aop学习总结一------使用jdk动态代理简单实现aop功能
- Java利用动态代理模拟实现Spring的AOP(面向切面编程)功能的小实践
- 【实现AOP功能的封装与配置】
- aop学习总结二------使用cglib动态代理简单实现aop功能
- 黑马程序员(八) 实现Aop功能的封装和配置的小程序
- 实现AOP的功能的封装与配置
- Java实现AOP功能的封装与配置的小框架实例代码
- 使用JDK中的Proxy技术实现AOP功能[动态代理]
- java基础巩固笔记(4)-实现AOP功能的封装与配置的小框架
- 动态代理手动实现Spring AOP的基本功能
- Spring AOP动态代理原理与实现方式
- AOP的底层实现--JDK动态代理,CGLIB动态代理