JAVA反射解析-getDeclaredMethod方法
程序员文章站
2022-10-03 14:06:33
解析反射类java.lang.Class中的属性和方法1、public Method getDeclaredMethod(String name, Class>… parameterTypes)常用反射获取对象的方法Class extends UserController> 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