假设a.txt文件是配置文件
文件路径如下:
代码如下:
public static void method4(){
try {
Properties properties = new Properties(); //使用properties类,new一个对象,此对象是一个map集合,用来保存a.txt中被切割开的一一对应的String类
properties.load(new FileInputStream("1012/resource/a.txt"));//加载a.txt文件
System.out.println(properties);
String studentServiceClassName = properties.getProperty("studentServiceClassName");//获得properties对象中对应Key键studentServiceClassName的Value值,此值是一个String类型的地址
Class<?> serviceClass = Class.forName(studentServiceClassName);//使用Class.for方法获得对应地址的类对象:serviceClass
Object serviceObj = serviceClass.newInstance();//使用newInstance方法new一个servuceClass类的对象
String studentDaoImplClassName = properties.getProperty("studentDaoImplClassName");//获得properties对象中对应Key键studentDaoImplClassName的Value值,此值是一个String类型的地址
Class<?> DaoClass = Class.forName(studentDaoImplClassName);//用Class.for方法获得对应的地址的类对象:DaoClass
Object daoObj = DaoClass.newInstance();//使用newInstance方法new一个DaoClass类的对象
Method setDao = serviceClass.getDeclaredMethod("setStudentDao", StudentDao.class);//调用getDeclaredMethod方法 返回一个方法类的对象setDao,返回的方法是一个有参构造,
setDao.invoke(serviceObj,daoObj);//使用invoke方法调用这个有参构造,里边填之前获得的对象daoObj,到这里已经完成了对StudentServiceImpl中的studentDao的赋值
Method method = serviceClass.getDeclaredMethod("method");//返回一个方法,这个方法是method,
method.invoke(serviceObj);//运行method方法
} catch (ClassNotFoundException | FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}