欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JAVA反射解析-getDeclaredMethod方法

程序员文章站 2022-10-03 14:06:33
解析反射类java.lang.Class中的属性和方法1、public Method getDeclaredMethod(String name, Class… parameterTypes)常用反射获取对象的方法Class clazz = userController.getClass();//<1>处代码在获取到Class对象之后,便可以获取有参方法① Method method = clazz....

解析反射类java.lang.Class中的属性和方法
1、public Method getDeclaredMethod(String name, Class<?>… parameterTypes)
常用反射获取对象的方法

  • Class<? extends UserController> clazz = userController.getClass();
    //<1>处代码
    在获取到Class对象之后,便可以获取有参方法
    ① Method method = clazz.getDeclaredMethod(String name, Class<?>… parameterTypes) //<2>代码
    获取本类中的所有方法
    ② Method method = clazz.getMethod(String name, Class<?>… parameterTypes)
    继续解析①中传入参数的代码 Method method = clazz.getDeclaredMethod(“setUserService”, UserService.class)
    第一个参数是方法名,第二个参数是方法参数,传入这两个参数之后,便可以根据方法名和方法参数通过反射获取带有参数的方法method。然后继续执行 method.invoke(Object obj, Object… args),第一个参数为实例对象,第二个参数为实参。总结:通过反射获取方法名,然后invoke方法注入方法对象和实参。//<3>处代码
    代码如下
    类名和属性
public class UserController {
    private UserService userService;
    public UserService getUserService() {
        return userService;
    }
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
}
public class UserService {
}

测试类(重要)

import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Test {
    public static void main(String[] args) throws Exception {
        UserController userController = new UserController();
        UserService userService = new UserService();
        System.out.println(userService);
        //<1>获取Class对象
        Class<? extends UserController> clazz = userController.getClass();
        //<2>获取想要注入的属性
        Field field = clazz.getDeclaredField("userService");
        //获取属性名称
        String name = field.getName();
        //获取set方法
        name = "set" + name.substring(0, 1).toUpperCase() + name.substring(1, name.length());
        System.out.println(name);
        //获取set方法对象
        Method method = clazz.getDeclaredMethod(name, UserService.class);
        System.out.println(method + "***");
        //<3>执行set方法
        method.invoke(userController, userService);
        System.out.println(userController.getUserService());
    }
}

输出结果

com.spring.code.ioc.define.UserService@7bb11784
setUserService
public void com.spring.code.ioc.define.UserController.setUserService(com.spring.code.ioc.define.UserService)***
com.spring.code.ioc.define.UserService@7bb11784

本文地址:https://blog.csdn.net/weixin_46106332/article/details/109269332