反射机制-调用对象方法
创建一个实体类用户服务类
/** * 用户业务类 */ 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; } // 可能还有一个同名login方法 // java中怎么区分一个方法,依靠方法名和参数列表。 public void login(int i){ } /** * 退出系统的方法 */ public void logout(){ System.out.println("系统已经安全退出!"); } }
使用反射机制获取里面的方法:
- 重点:通过反射机制怎么调用一个对象的方法?
- 反射机制,让代码很具有通用性,可变化的内容都是写到配置文件当中,
- 将来修改配置文件之后,创建的对象不一样了,调用的方法也不同了,
- 但是java代码不需要做任何改动。这就是反射机制的魅力。
public class ReflectTest10 { public static void main(String[] args) throws Exception{ // 不使用反射机制,怎么调用方法 // 创建对象 UserService userService = new UserService(); // 调用方法 /* 要素分析: 要素1:对象userService 要素2:login方法名 要素3:实参列表 要素4:返回值 */ boolean loginSuccess = userService.login("admin","123"); //System.out.println(loginSuccess); System.out.println(loginSuccess ? "登录成功" : "登录失败"); // 使用反射机制来调用一个对象的方法该怎么做? Class userServiceClass = Class.forName("com.bjpowernode.java.service.UserService"); // 创建对象 Object obj = userServiceClass.newInstance(); // 获取Method Method loginMethod = userServiceClass.getDeclaredMethod("login", String.class, String.class); //Method loginMethod = userServiceClass.getDeclaredMethod("login", int.class); // 调用方法 // 调用方法有几个要素? 也需要4要素。 // 反射机制中最最最最最重要的一个方法,必须记住。 /* 四要素: loginMethod方法 obj对象 "admin","123" 实参 retValue 返回值 */ Object retValue = loginMethod.invoke(obj, "admin","123123"); System.out.println(retValue); } }