春天aopframework实现

Java的代码  收藏代码
  1.  cn.itcast.day3.aopframework;  
  2. 进口 java.io.IOException的;  
  3. 进口 的java.io.InputStream;  
  4. 进口 java.util.Properties;  
  5. 进口 cn.itcast.day3.Advice;  
  6. 公共  的BeanFactory {  
  7.     属性道具=   特性();  
  8.     公共 Bean工厂(IPS的InputStream){  
  9.         尝试 {  
  10.             props.load(IPS);  
  11.         }  赶上 (IOException异常E){  
  12.             e.printStackTrace();  
  13.         }  
  14.     }  
  15.       
  16.     公共 对象的getBean(字符串名称){  
  17.         弦乐的className = props.getProperty(名称);  
  18.         对象豆=  ;  
  19.         尝试 {  
  20.             clazz类=的Class.forName(类名);  
  21.             豆= clazz.newInstance();  
  22.         }  赶上 (例外五){  
  23.             e.printStackTrace();  
  24.         }   
  25.         如果(豆  的instanceof  的ProxyFactoryBean){  
  26.             对象代理=  ;  
  27.             ProxyFactoryBean中的ProxyFactoryBean =(ProxyFactoryBean里)豆;  
  28.             尝试 {  
  29.                 意见建议=(咨询)的Class.forName(props.getProperty(姓名+  “.advice” ))的newInstance()。  
  30.                 对象目标=的Class.forName(props.getProperty(名称+  “的.target” ))的newInstance()。  
  31.                 proxyFactoryBean.setAdvice(咨询);  
  32.                 proxyFactoryBean.setTarget(目标);  
  33.                 代理= proxyFactoryBean.getProxy();  
  34.             }  赶上 (例外五){  
  35.                 e.printStackTrace();  
  36.             }  
  37.             返回 代理;  
  38.         }  
  39.         返回 豆;  
  40.     }  
  41. }  
  42.   
  43.  cn.itcast.day3.aopframework;  
  44.   
  45. 进口 的java.io.InputStream;  
  46. 进口 java.util.Collection的;  
  47.   
  48. 公共  AopFrameworkTest {  
  49.   
  50.     / ** 
  51.      * @参数的args 
  52.      * /  
  53.     公共 静态 无效 的主要(字串[] args)  抛出 异常{  
  54.         // TODO自动生成方法存根  
  55.         InputStream的IPS = AopFrameworkTest。.getResourceAsStream(“config.properties” );  
  56.         对象豆=   的BeanFactory(IPS).getBean(“XXX” );  
  57.         的System.out.println(bean.getClass()的getName());  
  58.         ((集合)豆).clear();  
  59.     }  
  60.   
  61. }  
  62.   
  63.  cn.itcast.day3.aopframework;  
  64.   
  65. 进口 java.lang.reflect.InvocationHandler;  
  66. 进口 java.lang.reflect.Method中;  
  67. 进口 java.lang.reflect.Proxy;  
  68.   
  69. 进口 cn.itcast.day3.Advice;  
  70.   
  71. 公共  的ProxyFactoryBean {  
  72.   
  73.     私人 咨询建议;  
  74.     私人 对象的目标;  
  75.       
  76.     公众 咨询getAdvice(){  
  77.         返回 意见;  
  78.     }  
  79.   
  80.     公共 无效 setAdvice(咨询意见){  
  81.         .advice =意见;  
  82.     }  
  83.   
  84.     公共 对象了getTarget(){  
  85.         返回 的目标;  
  86.     }  
  87.   
  88.     公共 无效 setTarget(目标对象){  
  89.         .TARGET =目标;  
  90.     }  
  91.   
  92.     公共 对象的getProxy(){  
  93.         // TODO自动生成方法存根  
  94.         反对Proxy3服务器= Proxy.newProxyInstance(  
  95.                 target.getClass()。getClassLoader(),  
  96.                 / *新的Class [] {} Collection.class,* /  
  97.                 target.getClass()。getInterfaces(),  
  98.                  的InvocationHandler(){  
  99.                   
  100.                     公共 对象调用(对象代理,方法的方法,对象[]参数)  
  101.                             抛出 的Throwable  
  102.   
  103.                         / *长BEGINTIME = System.currentTimeMillis的(); 
  104.                         对象retVal的= method.invoke(目标参数); 
  105.                         长endTime的= System.currentTimeMillis的(); 
  106.                         的System.out.println(method.getName()+“运行时间”+(endTime的 - BEGINTIME)); 
  107.                         返回retVal的; * /  
  108.                           
  109.   
  110.                         advice.beforeMethod(法);  
  111.                         对象retVal的= method.invoke(目标参数);  
  112.                         advice.afterMethod(法);  
  113.                         返回 retVal的;                        
  114.                           
  115.                     }  
  116.                 }  
  117.                 );  
  118.         返回 Proxy3发出;  
  119.     }  
  120.   
  121. }  
  122. config.properties  
  123. #XXX =的java.util.ArrayList  
  124. XXX = cn.itcast.day3.aopframework.ProxyFactoryBean  
  125. xxx.advice = cn.itcast.day3.MyAdvice  
  126. xxx.target =的java.util.ArrayList  
原文地址:https://www.cnblogs.com/baiduligang/p/4246986.html