Java-马士兵设计模式学习笔记-工厂模式-模拟Spring读取Properties文件

一、目标:读取properties文件,获得类名来生成对象

二、类

1.Movable.java

public interface Movable {
	void run();
}

  

2.Car.java

public class Car implements Movable {

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

  

3.spring.properties

PS:"="两边不能有空格

vechileType=com.tong.spring.factory.Car

  

4.Test.java

public class Test {
	
	@org.junit.Test
	public void test() {
		
		//读取properties文件,获得类名来生成对象
		Properties pros = new Properties();
		
		try {
			//1.读取要实例化的类名
			pros.load(Test.class.getClassLoader().getResourceAsStream("com/tong/spring/factory/spring.properties"));
			String vechileType = pros.getProperty("vechileType");
			
			//2.利用反射装载类及用newInstance()实例化类
			Object o = Class.forName(vechileType).newInstance();
			Movable m = (Movable)o;
			m.run();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

  

5.运行结果:

Java-马士兵设计模式学习笔记-工厂模式-模拟Spring读取Properties文件

6.若改成spring读取xml文件,则spring配置好后,增加applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

  <bean >
  </bean>

  <!-- more bean definitions go here -->

</beans>

  

7.Test.java改为如下

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