反射机制-调用对象方法

创建一个实体类用户服务类

/**
 * 用户业务类
 */
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);
    }
}

 

posted @ 2022-04-27 17:25  280887072  阅读(140)  评论(0编辑  收藏  举报