接口:
package zeng;
public interface Operator {
public void act();
}
具体的两个类:package zeng;
public class Success implements Operator {
@Override
public void act() {
System.out.println("操作成功");
}
}
package zeng;
public class Load implements Operator {
@Override
public void act() {
System.out.println("等待中");
}
}
具体实现:package zeng;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;
public class TestReflect {
// 加载配置文件,查询消息头对应的类名
private String loadProtocal(String header) {
String result=null;
try {
Properties prop = new Properties();
InputStream fis=TestReflect.class.getClassLoader().getResourceAsStream("emp.properties");
prop.load(fis);
result = prop.getProperty(header);
fis.close();
} catch (Exception e) {
System.out.println(e);
}
return result;
}
// 针对消息作出响应,利用反射导入对应的类
public void response(String header) {
String s =null;
try {
/*
* * 导入属性文件emp.properties,查询header所对应的类的名字 *
* 通过反射机制动态加载匹配的类,所有的类都被Operator接口隔离 *
* 可以通过修改属性文件、添加新的类(继承MsgOperator接口)来扩展协议
*/
s =this.loadProtocal(header);
// 加载类
Class c = Class.forName(s);
// 创建类的事例
Operator mo = (Operator) c.newInstance();
// 查询act方法
Method m = c.getMethod("act");
// 调用方法
m.invoke(mo);
} catch (Exception e) {
System.out.println("Handler-response:" + e);
}
}
public static void main(String[] args) {
TestReflect tr=new TestReflect();
tr.response("1000");
}
}
emp.properties文件的代码:
1000=Success
2000=Load
我这里一直报如下图的错误,问题是出在加载类时候报错,但是我不知道为什么错了。
|
-
9.png
(12.59 KB, 下载次数: 25)
|