A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周发建 中级黑马   /  2016-4-1 09:51  /  377 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

(一)模拟spring
//实现AOP,模拟Spring
/**
* BeanFactory
* ProxyFactoryBean
*/
class BeanFactory{
        private Properties pro = new Properties();
        //加载配置文件
        public BeanFactory(InputStream in){
                try {
                        pro.load(in);
                } catch (Exception e) {
                }
        }
        public Object getBean(String name)throws Exception{
                Class clazz = Class.forName(pro.getProperty(name));
                Object bean = clazz.newInstance();
                if(bean instanceof ProxyFactoryBean){
                        ProxyFactoryBean proxyBean = (ProxyFactoryBean)bean;
                        Advice advice = (Advice) Class.forName(pro.getProperty(name+".advice")).newInstance();
                        Object target = Class.forName(pro.getProperty(name+".target")).newInstance();
                        proxyBean.setAdvice(advice);
                        proxyBean.setTar(target);
                       
                        return proxyBean.getProxy();
                }
                return bean;
        }
}
class ProxyFactoryBean{
        private Object tar;
        private Advice advice;
        public Object getTar() {
                return tar;
        }
        public void setTar(Object tar) {
                this.tar = tar;
        }
        public Advice getAdvice() {
                return advice;
        }
        public void setAdvice(Advice advice) {
                this.advice = advice;
        }
        public Object getProxy(){
                return Proxy.newProxyInstance(
                                tar.getClass().getClassLoader(),
                                tar.getClass().getInterfaces(),
                                new MyInvocationHandler(tar, advice));
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马