疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

java培训,模拟spring的beanFactory


 

  今天java培训机构带大家来一起了解一下关于spring的bean工厂模式,在spring中,我们将类配置到applicationContext.xml文件中,然后就可以从beanFactoy中取出这个类的对象,这里需要用得到java中xml的解析技术,常用的有四种解析技术,我们这里用到的是jdom解析,首先需要在jdom的官网上www.jdom.org下载jdom的jar文件,把lib下的全部jar包引进和jdom.jar这个核心jar包引进就OK了.

  下面直接上代码

  交通工具接口

  1. package com.soukenan.spring.factory;

  2.

  3. public interface Vehicle {

  4. public void run();

  5. }

  两个实现了这个接口的类

  汽车类

  1. package com.soukenan.spring.factory;

  2.

  3. public class Car implements Vehicle{

  4.

  5. @Override

  6. public void run() {

  7. System.out.println("我有四个轱辘,我可以跑的很快,,,,,,,");

  8. }

  9.

  10. }

  火车类

  1. package com.soukenan.spring.factory;

  2.

  3. public class Train implements Vehicle{

  4.

  5. @Override

  6. public void run() {

  7. System.out.println("我有很多的轱辘,我可以跑的非常非常的快,,,,,,");

  8. }

  9.

  10. }

  spring的配置文件

  1.

  2.

  3.

  4.

  5.

  6.

  7.

  BeanFactory接口

  1. package com.soukenan.spring.factory;

  2.

  3. public interface BeanFactory {

  4. public Object getBean(String id);

  5. }

  实现了该接口的ClassPathXmlApplicationContext类

  1. package com.soukenan.spring.factory;

  2.

  3. import java.io.IOException;

  4. import java.util.HashMap;

  5. import java.util.List;

  6. import java.util.Map;

  7.

  8. import org.jdom2.Document;

  9. import org.jdom2.Element;

  10. import org.jdom2.input.SAXBuilder;

  11. import org.jdom2.xpath.XPath;

  12.

  13. public class ClassPathXmlApplicationContext implements BeanFactory {

  14.

  15. public Map container = new HashMap();

  16.

  17.

  18. public ClassPathXmlApplicationContext(String path) throws Exception{

  19. SAXBuilder sb = new SAXBuilder();

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

  21. Element root = doc.getRootElement();

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

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

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

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

  26. String className = bean.getAttributeValue("class");

  27. Object o = Class.forName(className).newInstance();

  28. container.put(id, o);

  29. }

  30. }

  31. @Override

  32. public Object getBean(String id) {

  33. return this.container.get(id);

  34. }

  35.

  36. }

  各个文件的目录

  测试主类

  1. package com.soukenan.spring.factory;

  2.

  3. import java.io.IOException;

  4. import java.util.Properties;

  5.

  6. public class Main {

  7. public static void main(String[] args) throws IOException, InstantiationException, IllegalAccessException, Exception{

  8.

  9.

  10. BeanFactory bf = new ClassPathXmlApplicationContext("applicationContext.xml");

  11. Vehicle v = (Vehicle) bf.getBean("car");

  12. v.run();

  13. }

  14. }

  以上介绍的就是跟spring一样的一个工厂类,希望能对各位有帮助!如果你还想了解更多关于java的知识,欢迎来到疯狂软件学院。疯狂来自梦想,技术成就辉煌。