用代理写的一个小框架

来源:互联网 发布:linux 关闭swap分区 编辑:程序博客网 时间:2024/06/11 01:33

1、Bean工厂

package com.ren.day03.bean;import java.io.IOException;import java.io.InputStream;import java.util.Properties;import com.ren.day03.Advice;public class BeanFactory {Properties props = new Properties();public BeanFactory(InputStream ips) {super();try {props.load(ips);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//获取代理public Object getBean(String name) {Object bean = null;String className = props.getProperty(name);Class clazz;try {clazz = Class.forName(className);bean = clazz.newInstance();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}if(bean instanceof ProxyFactoryBean){Object proxy = null;ProxyFactoryBean proxyBean = (ProxyFactoryBean)bean;try {Advice advice = (Advice)Class.forName(props.getProperty(name + ".advice")).newInstance();Object target = Class.forName(props.getProperty(name + ".target")).newInstance();proxyBean.setAdvice(advice);proxyBean.setTarget(target);proxy = proxyBean.getProxy();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}return proxy;}return bean;}}

2、代理bean工厂

package com.ren.day03.bean;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.util.Collection;import com.ren.day03.Advice;public class ProxyFactoryBean {private Object target = null;public Object getTarget() {return target;}public void setTarget(Object target) {this.target = target;}public Advice getAdvice() {return advice;}public void setAdvice(Advice advice) {this.advice = advice;}private Advice advice = null;public Object getProxy() {// TODO Auto-generated method stubObject proxy3 = Proxy.newProxyInstance(Collection.class.getClassLoader(), new Class[]{Collection.class}, new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {// TODO Auto-generated method stubadvice.beforeMehtod(method); //通过对象传入方法Object obj = method.invoke(target, args);advice.afterMehtod(method); return obj;}});return proxy3;}}

3、配置文件

#xxx=java.util.ArrayListxxx=com.ren.day03.bean.ProxyFactoryBeanxxx.advice=com.ren.day03.MyAdvicexxx.target=java.util.ArrayList

4、测试框架类

package com.ren.day03.bean;import java.io.InputStream;public class TestFrameWork {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubInputStream ips = TestFrameWork.class.getResourceAsStream("config.properties");Object bean = new BeanFactory(ips).getBean("xxx");System.out.println(bean.getClass().getName());}}


原创粉丝点击