简单模拟spring的容器管理beanJava认证考试

文章作者 100test 发表时间 2009:04:10 01:55:13
来源 100Test.Com百考试题网


  package com.spring.
  import java.io.IOException.
  import java.net.URL.
  import java.util.ArrayList.
  import java.util.HashMap.
  import java.util.List.
  import java.util.Map.
  import org.jdom.Document.
  import org.jdom.Element.
  import org.jdom.JDOMException.
  import org.jdom.input.SAXBuilder.
  import org.jdom.xpath.XPath.
  import com.vo.BeanDefinition.
  /**
  * 简单模拟spring的ClassPathXmlApplicationContext spring容器管理bean
  *
  * @author 100test
  *
  */
  @SuppressWarnings("unchecked")
  public class MyApplicationContext
  {
  private List<.BeanDefinition>. list = new ArrayList<.BeanDefinition>.().
  private Map<.String, Object>. sigletons = new HashMap<.String, Object>.().
  public MyApplicationContext(String fileName)
  {
  this.readXML(fileName).
  try
  {
  instanceBeans().
  }
  catch (Exception e)
  {
  e.printStackTrace().
  }
  }
  /**
  * 实例化所有bean
  *
  * @throws InstantiationException
  * @throws IllegalAccessException
  * @throws ClassNotFoundException
  */
  private void instanceBeans() throws InstantiationException,
  IllegalAccessException, ClassNotFoundException
  {
  for (BeanDefinition bean : list)
  {
  if (null != bean.getClassName() &.&. bean.getClassName().length() >. 0)
  sigletons.put(bean.getId(), Class.forName(bean.getClassName())
  .newInstance()).
  }
  }
  /**
  * 读取xml配置
  *
  * @param fileName
  */
  public void readXML(String fileName)
  {
  SAXBuilder builder = new SAXBuilder().
  URL url = this.getClass().getClassLoader().getResource(fileName).
  try
  {
  Document doc = builder.build(url).
  XPath xpath = XPath.newInstance("//ns:beans/ns:bean").
  xpath.addNamespace("ns",
  "http://www.springframework.org/schema/beans").
  List<.Element>. beans = xpath.0selectNodes(doc).
  for (Element bean : beans)
  {
  String id = bean.getAttributeValue("id").
  String className = bean.getAttributeValue("class").
  BeanDefinition beanDefinition = new BeanDefinition(id,
  className).
  list.add(beanDefinition).
  }
  }
  catch (JDOMException e)
  {
  e.printStackTrace().
  }
  catch (IOException e)
  {
  e.printStackTrace().
  }
  }
  /**
  * 得到指定id的bean
  *
  * @param id
  * @return
  */
  public Object getBean(String id)
  {
  return sigletons.get(id).
  }
  }
  测试:
  @Test
  public void testMyUserService()
  {
  MyApplicationContext ctx = new MyApplicationContext("beans.xml").
  UserService us = (UserService) ctx.getBean("userService").
  us.print().
  }

相关文章


使用Synchronized关键字同步类方法Java认证考试
EclipseRiena1.0发布:基于Eclipse富客户端平台Java认证考试
简单模拟spring的容器管理beanJava认证考试
平台之争Java与.NET谁更有前途Java认证考试
Java编程(如何学好Java语法)Java认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛