Spring就是通过工厂+反射将我们的bean放到它的容器中的

来源:互联网 发布:照片日期添加软件 编辑:程序博客网 时间:2024/05/23 01:58

  Spring容器的原理,其实就是通过解析xml文件,或取到用户配置的bean,然后通过反射将这些bean挨个放到集合中,然后对外提供一个getBean()方法,以便我们获得这些bean。下面是一段简单的模拟代码:

  package com.tgb.spring.factory;

  import java.util.HashMap;

  import java.util.List;

  import java.util.Map;

  import org.jdom.Document;

  import org.jdom.Element;

  import org.jdom.input.SAXBuilder;

  import org.jdom.xpath.XPath;

  public class ClassPathXmlApplicationContext implements BeanFactory {

  //容器的核心,用来存放注入的Bean

  private Map container = new HashMap();

  //解析xml文件,通过反射将配置的bean放到container中

  public ClassPathXmlApplicationContext(String fileName) throws Exception{

  SAXBuilder sb = new SAXBuilder();

  Document doc = sb.build(this.getClass().getClassLoader().getResourceAsStream(fileName));

  Element root = doc.getRootElement();

  List list = XPath.selectNodes(root, "/beans/bean");

  //扫描配置文件中的bean

  for (int i = 0; i < list.size(); i++) {

  Element bean = (Element) list.get(i);

  http://dfeej.info;

  http://rtkuh.info;

  http://xrtyf.info;

  http://qefky.info;

  http://whjir.info;

  http://dfew.info;

  http://cbjya.info;

  http://qwfgr.info;

  http://kuyhb.info;

  http://qjyt.info;

  http://wrtu.info;

  http://xdes.info;

  http://mkoy.info;

  http://txbf.info;

  http://wfkm.info;

  http://njer.info;

  http://www.dfeej.info;

  http://www.rtkuh.info;

  http://www.xrtyf.info;

  http://www.qefky.info;

  http://www.whjir.info;

  http://www.dfew.info;

  http://www.cbjya.info;

  http://www.qwfgr.info;

  http://www.kuyhb.info;

  http://www.qjyt.info;

  http://www.wrtu.info;

  http://www.xdes.info;

  http://www.mkoy.info;

  http://www.txbf.info;

  http://www.wfkm.info;

  http://www.njer.info;

  http://yuip.info;

  http://fwqw.info;

  http://hyui.info;

  http://q237.info;

  http://www.yuip.info;

  http://www.fwqw.info;

  http://www.hyui.info;

  http://www.q237.info;

  http://gsfea.info;

  http://swzsa.info;

  http://123wb.info;

  http://ts235.info;

  http://dt098.info;

  http://sbr69.info;

  http://xdfth.info;

  http://dft2.info;

  http://dvny6.info;

  http://rh5n.info;

  String id = bean.getAttributeValue("id");

  String clazz = bean.getAttributeValue("class");

  Object o = Class.forName(clazz).newInstance();

  container.put(id, o);

  }

  }

  @Override

  public Object getBean(String id) {

  return container.get(id);

  }

  }

  首先声明一个存放bean的Map,然后通过jdom解析配置文件,循环遍历所有的节点,并通过反射将它们放到我们之前声明的Map中。然后提供一个getBean()的方法,让我们可以通过bean的Id来找到我们想要的bean。

  下面是一个简单的xml配置文件:

0 0
原创粉丝点击