《黑马程序员》 动态代理之Aop框架的实现
来源:互联网 发布:墨子号 知乎 编辑:程序博客网 时间:2024/05/01 21:22
package cn.itheima.day427.aopframework;import java.lang.reflect.Method;public interface Advice {void beginTime(Method method);void endTime(Method method);}package cn.itheima.day427.aopframework;import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class BeanFactory {//标准类就直接返回这个类的对象//代理的类就创建这个类的代理。然后返回这个代理对象private Properties prop=new Properties();public BeanFactory(InputStream is){try {prop.load(is);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public Object getBean(String name){Object bean=null;try {//返回bean对象Class clazz=Class.forName(prop.getProperty(name)); bean=clazz.newInstance();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}if(bean instanceof ProxyFactoryBean){//特殊的bean的处理Object proxy=null;try {ProxyFactoryBean proxyBean=(ProxyFactoryBean)bean;//获取advice和target对象Advice advice=(Advice)Class.forName(prop.getProperty(name+".advice")).newInstance();Object target=Class.forName(prop.getProperty(name+".target")).newInstance();proxyBean.setAdvice(advice);proxyBean.setTarget(target);proxy = proxyBean.getProxy();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return proxy;}return bean;}}package cn.itheima.day427.aopframework;import java.lang.reflect.Method;import java.util.Random;import java.util.concurrent.TimeUnit;public class MyAdvice implements Advice {private long beginTime;@Overridepublic void beginTime(Method method) {try {beginTime = System.currentTimeMillis();TimeUnit.SECONDS.sleep(new Random().nextInt(5) + 1);} catch (Exception e) {// TODO: handle exception}}@Overridepublic void endTime(Method method) {long endTime=System.currentTimeMillis();System.out.println(method.getName()+"运行了:"+(endTime-beginTime)/1000+"秒");}}package cn.itheima.day427.aopframework;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class ProxyFactoryBean {private Advice advice;private Object target;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 Object getProxy() { // 返回产生的代理类对象Object proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(),new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method,Object[] args) throws Throwable {advice.beginTime(method); //面向切面的编程Object retVal=method.invoke(target, args);advice.endTime(method);return retVal;}});return proxy;}}package cn.itheima.day427.aopframework;import java.io.InputStream;public class AopFrameworkDemo {/** * @param args */public static void main(String[] args) {InputStream is=AopFrameworkDemo.class.getResourceAsStream("config.properties");Object bean=new BeanFactory(is).getBean("xxxx");System.out.println(bean.getClass().getName()); //代理对象怎么有返回}}#xxxx=java.util.ArrayListxxxx=cn.itheima.day427.aopframework.ProxyFactoryBeanxxxx.advice=cn.itheima.day427.aopframework.MyAdvicexxxx.target=java.util.ArrayList
0 0
- 《黑马程序员》 动态代理之Aop框架的实现
- 黑马程序员-高新技术-动态代理及AOP框架
- 黑马程序员--代理+AOP--实现一个类似spring的可配置的简单AOP框架
- 黑马程序员 Java创建动态代理类实现Aop编程
- 黑马程序员_高新技术五(动态代理类,代理类的作用与原理,AOP框架应用)
- 黑马程序员_高新技术5(动态代理类,代理类的作用与原理,AOP框架应用)
- 黑马程序员--09.动态与代理AOP--04【推理动态代理类内部结构I】【InvocationHandler实现类的具体写法】
- 黑马程序员--09.动态与代理AOP--06【动态代理实例化的过程升级--目标对象+系统功能的参数化】【实现类似Spring的可配置AOP框架】
- 黑马程序员-代理、实现类似Spring的可配置AOP框架
- 黑马程序员---------动态代理类与AOP
- 黑马程序员_基础加强_代理&动态代理&AOP框架应用
- 黑马程序员--09.动态与代理AOP--01【代理的作用与概念】【动态代理与AOP】
- 黑马程序员_高新技术四(Java动态代理、AOP简单框架)
- Spring AOP 代理实现的两种方式: JDK动态代理 和 Cglib框架动态代理
- 黑马程序员-AOP代理以及类spring的Aop框架实例
- 黑马程序员—AOP代理以及类似Spring的简单Aop框架
- 【spring框架】利用动态代理实现AOP
- 黑马程序员-----代理之动态代理总结*
- A. Sereja and Mugs
- 这不只是为了一群牛,这是为了我们的自由
- jQuery实现图片延迟加载
- Android常用代码之APK root权限静默安装
- 串行 并行 同步 异步
- 《黑马程序员》 动态代理之Aop框架的实现
- Oracle 安装常见问题
- 设计模式一日一练:命令模式(Command)
- 西游记中景点
- QT移动无边框窗口
- Serializable 作用
- D3D中的渲染状态简介
- select函数
- 互联网的优势是创出来的