Contents
23.3. 依赖注入实现¶
创建松耦合、基于配置的程序
Java反射机制能够在运行时动态加载类,而不是在编译期。
在一些框架开发中经常将要实例化的类名保存到配置文件中,在运行时从配置文件中读取类名字符串,然后动态创建对象,建立依赖关系
。采
用new创建对象依赖关系是在编译期建立的,反射机制能够将依赖关系推迟到运行时建立,这种依赖
关系动态注入进来称为依赖注入
config.txt
com.a52work.Discourse75
Discourse.java
package com.a52work;
public interface Discourse {
public int getDiscourse(); //折扣的变量
}
Discourse75.java
package com.a52work;
public class Discourse75 implements Discourse{
// 继承接口,返回75折
@Override
public int getDiscourse() {
return 75;
}
}
Discourse85.java
package com.a52work;
public class Discourse85 implements Discourse {
// 继承接口,返回85折
@Override
public int getDiscourse() {
return 85;
}
}
Person.java
package com.a52work;
public class Person {
private double price = 80.0;
public void buy(Discourse d) {
System.out.println("当前折扣:" + d.getDiscourse());
System.out.println("原价:"+ price);
System.out.println("折后价:" + price*d.getDiscourse()/100);
}
}
Test.java
package com.a52work;
import java.io.BufferedReader;
import java.io.FileReader;
public class Test {
public static void main(String[] args) throws Exception {
Person p1 = new Person();
/* Discourse d = new Discourse75();
Discourse d1 = new Discourse85();*/
BufferedReader br = new BufferedReader(new FileReader("D:\\Java_Study/Day26/src/com/a52work/config.txt"));
String line = br.readLine();
Class cls = Class.forName(line);
Discourse d = (Discourse) cls.newInstance();
p1.buy(d);
System.out.println("-----------");
//p1.buy(d1);
}
}