zoukankan      html  css  js  c++  java
  • Java-马士兵设计模式学习笔记-工厂模式-用Jdom模拟Spring

     一、概述

    1.目标:模拟Spring的Ioc

    2.用到的知识点:利用jdom的xpath读取xml文件,反射

    二、有如下文件:

    1.applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans>
      <bean id="vehicle" class="com.tong.spring.factory.Car">
      </bean>
    </beans>
    

      

    2.BeanFactory.java

    public interface BeanFactory {
    	Object getBean(String id);
    }
    

      

    3.ClassPathXmlApplicationContext.java

    public class ClassPathXmlApplicationContext implements BeanFactory{
    	
    	private Map<String, Object> container = new HashMap<String, Object>();
    
    	public ClassPathXmlApplicationContext(String fileName) {
    		
    		//读取xml文件
    		SAXBuilder sb = new SAXBuilder();
    		Document doc;
    		try {
    			//doc = sb.build(fileName);
    			//Test.java要改为BeanFactory factory = new ClassPathXmlApplicationContext("com/tong/spring/factory/applicationContext.xml");
    			//否则付出现“java.net.MalformedURLException”
    			doc = sb.build(this.getClass().getClassLoader().getResourceAsStream(fileName));
    			Element root = doc.getRootElement();
    			List list = XPath.selectNodes(root, "/beans/bean");
    
    			for (int i = 0; i < list.size(); i++) {
    				Element element = (Element) list.get(i);
    				String id = element.getAttributeValue("id");
    				String clazz = element.getAttributeValue("class");
    
    				// 利用反射生成例,然后装进容器
    				Object o = Class.forName(clazz).newInstance();
    				container.put(id, o);
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    
    	}
    
    	@Override
    	public Object getBean(String id) {
    		return container.get(id);
    	}
    
    }
    

      

    4.Movable.java

    public interface Movable {
    	void run();
    }
    

      

    5.Car.java

    public class Car implements Movable {
    
    	public void run() {
    		System.out.println("Car running...............");
    	}
    	
    }
    

     

    6.Test.java 

    public class Test {
    	
    	@org.junit.Test
    	public void test() {
    		
    		//BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
    		BeanFactory factory = new ClassPathXmlApplicationContext("com/tong/spring/factory/applicationContext.xml");
    		Object o = factory.getBean("vehicle");
    		Movable m = (Movable)o;
    		m.run();
    	}
    }
    

      

      

    运行结果:

  • 相关阅读:
    四种常见系统架构介绍
    NC-UAP客户化开发-数据建模
    NC-UAP客户化开发-4.NC数据库持久化技术
    NC-UAP客户化开发-NC基础技术
    NC-UAP客户化开发-开发环境搭建
    Docker: 使用socket 代理
    Disk:磁盘管理之LVM和系统磁盘扩容
    Grafana & Graphite & Collectd:监控系统
    ELK:收集k8s容器日志最佳实践
    Virus:病毒查杀
  • 原文地址:https://www.cnblogs.com/shamgod/p/4587387.html
Copyright © 2011-2022 走看看