外部程序吧字节码文件的名称保存在配置文件中,主函数从配置文件读取,进而运行外部程序。
接口:
package cn.itcast.reflecttest.demo;
//接口
public interface Pic {
public void open();
public void close();
}
主板:
package cn.itcast.reflecttest.demo;
//主板
public class MainBord {
public MainBord() {
super();
System.out.println("MainBord run....");
}
public void show(Pic pic) {
pic.open();
pic.close();
}
}
内部程序:
package cn.itcast.reflecttest.demo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ReflectTest {
public static void main(String[] args) throws IOException, Exception {
//创建面板对象
MainBord mb=new MainBord();
//创建配置文件对象
File configfile=new File("pic.properties");
//创建集合
Properties pr=new Properties();
//读取配置文件
FileInputStream in=new FileInputStream(configfile);
//将配置文件加载到集合中
pr.load(in);
for(int i=0;i<pr.size();i++) {
//获取字节码文件的名称
String string=pr.getProperty("coonc"+(i+1));
//创建字节码文件对象
Class cc=Class.forName(string);
//创建外设对象
Pic pic=(Pic)cc.newInstance();
//运行
mb.show(pic);
}
}
}
外部程序1:
package cn.itcast.reflecttest.demo;
//外部程序
public class Sound implements Pic {
@Override
public void open() {
System.out.println("sound run....");
}
@Override
public void close() {
System.out.println("sound run...");
}
}
外部程序2:
package cn.itcast.reflecttest.demo;
public class Keybord implements Pic {
@Override
public void open() {
System.out.println("keybord open....");
}
@Override
public void close() {
System.out.println("keybord close....");
}
}
配置文件:pic.properties
coonc1=cn.itcast.reflecttest.demo.Sound
coonc2=cn.itcast.reflecttest.demo.Keybord