Spring反射实现模型

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ApplicationContext {
    //缓存spring容器的Bean对象
    private Map<String,Object> beans = new HashMap<String, Object>();
    /*
     * 利用配置文件初始化当前容器
     */
    public ApplicationContext( String xml) throws Exception{
        //利用dom4j读取xml文件
        //解析xml文件得到bean类名和bean的id

        //从Resource(classpath)中读取流
        InputStream in = getClass().getClassLoader().getResourceAsStream(xml);
        SAXReader reader = new SAXReader();
        Document doc =  reader.read(in);
        in.close();
        //解析xml <beans><bean>...
        Element root =doc.getRootElement();
        //读取根元素中全部的bean子元素
        List<Element> list = root.elements("bean");
        for (Element e:list) {
            //e就是bean元素 id属性 class属性
            String id = e.attributeValue("id");
            String className = e.attributeValue("class");

            //动态加载类动态创建对象
            Class cls = Class.forName(className);
            Object object = cls.newInstance();
            beans.put(id,object);
        }

    }

    public Object getBean(String id){
        //根据id在map中查找对象,并返回对象
        return  beans.get(id);
    }

    //泛型方法:优点可以减少一次类型转换
    public<T> T  getBean(String id,Class<T> cls){
        return (T)beans.get(id);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值