注:IOC中最基本的技术就是“反射(Reflection)”编程,通俗来讲就是根据给出的类名(字符串方式)来动态地生成对象,这种编程方式可以让对象在生成时才被决定到底是哪一种对象。只是在Spring中要生产的对象都在配置文件中给出定义,目的就是提高灵活性和可维护性。
1. 创建接口
ISay.java
package cn.xxs.say;
public interface ISay {
/**
* say
*/
public void say();
}
1>.分别实现接口ISay
2>.演示中日文输出 (CSay,JSay)
CSay.java
package cn.xxs.say.impl;
import cn.xxs.say.ISay;
public class CSay implements ISay{
/**
* say
*/
public void say() {
System.out.println("早上好!");
}
}
JSay.java
package cn.xxs.say.impl;
import cn.xxs.say.ISay;
public class JSay implements ISay{
/**
* say
*/
public void say() {
System.out.println("グッドモーニング\r\n" +
"!");
}
}
2.创建配置文件
src下创建say.properties
csay=cn.xxs.say.impl.CSay
jsay=cn.xxs.say.impl.JSay
1>.创建property
2>.读取
3>.通过Class.forName 创建对象实例
3.调用
用junit测试一下
package cn.xxs.test;
import java.util.Properties;
import org.junit.Test;
import cn.xxs.say.ISay;
public class SayTest {
@Test
public void test() throws Exception{
//中文问好
//1.创建Properties对象
Properties pro = new Properties();
//2.读取文件中的配置
pro.load(SayTest.class.getResourceAsStream("/say.properties"));
//3.传入一个参数,获取在配置文件中参数对应的值
String className = pro.getProperty("csay");
//4.实例化对象
ISay csay = (ISay) Class.forName(className).newInstance();
//5.调用对象中的方法
csay.say();
}
@Test
public void test1() throws Exception{
//中文问好
//1.创建Properties对象
Properties pro = new Properties();
//2.读取文件中的配置
pro.load(SayTest.class.getResourceAsStream("/say.properties"));
//3.传入一个参数,获取在配置文件中参数对应的值
String className = pro.getProperty("jsay");
//4.实例化对象
ISay jsay = (ISay) Class.forName(className).newInstance();
//5.调用对象中的方法
jsay.say();
}
}
测试结果: