国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

56_實現類似spring的可配置的AOP框架

2019-11-14 22:53:48
字體:
來源:轉載
供稿:網友
56_實現類似sPRing的可配置的AOP框架

》 config.properties  配置文件   key=類名

》 BeanFactory  Bean工廠,負責得到bean  getBean(“xxx”)

》ProxyBeanFactory 產生代理的工廠  getProxy(Object target,Advice advice);

》AopFrameworkTest 測試類

 

思路:

getBean(”xxx”)

xxx=ProxyBeanFactory 時,返回代理類對象

xxx=其他類時,直接返回該類對象

 

 

  • config.properties
#xxx=java.util.ArrayListxxx=com.itcast.day3.aopframework.ProxyBeanFactoryxxx.advice=com.itcast.day3.MyAdvicexxx.target=java.util.ArrayList

 

  • BeanFactory
package com.itcast.day3.aopframework;import java.io.IOException;import java.io.InputStream;import java.util.Properties;import com.itcast.day3.Advice;public class BeanFactory {    private Properties props=new Properties();        public BeanFactory(InputStream ips){        try {            props.load(ips);        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }       //bean工廠     public Object getBean(String name){        Object bean=null;         try {            bean=Class.forName(props.getProperty(name)).newInstance();             if(bean instanceof ProxyBeanFactory){                 Object proxy=null;                 ProxyBeanFactory proxyFactoryBean=(ProxyBeanFactory)bean;                 Advice advice = (Advice)Class.forName(props.getProperty(name+".advice")).newInstance();                 Object target = Class.forName(props.getProperty(name+".target").newInstance());                 proxyFactoryBean.setAdvice(advice);                 proxyFactoryBean.setTarget(target);                 proxy=proxyFactoryBean.getProxy();                 return proxy;             }        } catch (Exception e) {            e.printStackTrace();        }         return bean;    }    }
  • ProxyBeanFactory

 

package com.itcast.day3.aopframework;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import com.itcast.day3.Advice;public class ProxyBeanFactory {    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(){//匿名內部類                    @Override                    public Object invoke(Object proxy, Method method,                            Object[] args) throws Throwable {                        advice.beforeMethod(method);                        Object reVal=method.invoke(target, args);//反射方式調用目標類的方法                        advice.afterMethod(method);                        return reVal;                    }                }            );        return proxy;    }        }

 

  • AopFrameworkTest
package com.itcast.day3.aopframework;import java.io.InputStream;import java.lang.reflect.Type;import java.util.ArrayList;import java.util.Collection;public class AopFrameworkTest {    public static void main(String[] args) throws Exception {        InputStream ips=AopFrameworkTest.class.getResourceAsStream("config.properties");        Object bean=new BeanFactory(ips).getBean("xxx");                if(bean instanceof ArrayList){            Collection collection=((Collection)bean);            collection.add("123");            for(Object obj:collection){                System.out.println(obj);            }        }else{            System.out.println("返回的是代理類: "+bean.getClass().getName()+" 的實例");            ((Collection)bean).clear();        }    }}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 景洪市| 怀仁县| 社旗县| 云南省| 城市| 龙南县| 大姚县| 盐津县| 宝鸡市| 孝义市| 曲周县| 社旗县| 阳原县| 宜兰县| 宝兴县| 揭阳市| 崇明县| 美姑县| 宜昌市| 通道| 兴国县| 诸暨市| 德兴市| 枣阳市| 江西省| 民权县| 佳木斯市| 鄂州市| 乌拉特中旗| 武威市| 航空| 内黄县| 抚松县| 遵义县| 阿拉善右旗| 肇庆市| 那坡县| 夹江县| 潞城市| 温泉县| 芒康县|