package com.javase.reflect;
import com.javase.service.UserService;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ResourceBundle;
/**
* 通过反射机制调用方法(必须掌握,五颗星*****)
*
* 反射机制让代码具有很强的通用性,可变化的内容都可以写到配置文件中,将来修改配置文件之后,创建的对象
* 就不一样了,调用的方法也不同了,但是这段java代码不需要改变,这就是反射机制的魅力。
*/
public class ReflectMethodText03五颗星 {
public static void main(String[] args) {
//不使用反射机制调用方法
//创建对象
UserService userService = new UserService();
//调用方法
/**
* 要素分析
* 要素1:对象userService
* 要素2:方法名login
* 要素3:实际参数
* 要素4:返回值
*/
boolean loginSuccess = userService.login("admin","123");
//使用反射机制来调用一个对象的方法
//通过资源绑定器来读取配置文件(属性配置文件dp.properties在IDEA中的目录结构如下图)
ResourceBundle bundle = ResourceBundle.getBundle("dp");
String className = bundle.getString("className");
String methodName = bundle.getString("methodName");
String name = bundle.getString("name");
String password = bundle.getString("password");
try {
//获取类
Class userServiceClass = Class.forName(className);
//创建对象(该方法会调用com.javase.service.UserService类中的无参数构造方法,必须保证该类中提供了无参构造)
Object obj = userServiceClass.newInstance();
//获取Method(下面方法是通过方法名和形参来获取方法)
Method loginMethod = userServiceClass.getDeclaredMethod(methodName, String.class, String.class);
//调用方法
//使用反射机制调用方法也需要4要素,使用反射机制调用方法是反射机制中最最最重要的方法,必须记住
/**
* 使用反射机制调用方法也需要4要素:
* 要素1:对象obj
* 要素2:方法loginMethod
* 要素3:实参"admin","123"
* 要素4:返回值retValue
*/
Object retValue = loginMethod.invoke(obj,name,password);
//打印方法调用后的返回值
System.out.println(retValue);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
package com.javase.service;
/**
* 用户业务类
*/
public class UserService {
/**
* 用户登录方法
* @param name 用户名
* @param password 密码
* @return true表示登录成功 false表示登录失败
*/
public boolean login(String name,String password){
if ("admin".equals(name) && "123".equals(password)){
return true;
}
return false;
}
/**
* 退出系统方法
*/
public void logout(){
System.out.println("系统已经安全退出!");
}
}

属性配置文件dp.properties在IDEA中的目录结构

属性配置文件dp.properties



















