怎样通过反射机制调用java对象的方法?
@RestController public class GetStudentInfoController { private static final Logger logger = LoggerFactory.getLogger(RecvXmlHandler.class); @Autowired private StudentService studentService; public String GetStudentInfo(Object msg,RepTransaction transaction){ String byteBuf = (String) msg; logger.info(Thread.currentThread().getName() + " server recvied: " +byteBuf); StudentReq studentReq = (StudentReq) S_UtilsXml.getEntity(byteBuf,StudentReq.class); logger.info(Thread.currentThread().getName() + " request data: "+studentReq.toString()); Student stu = new Student(); //RepTransaction transaction = new RepTransaction(); String repXml = ""; if (studentReq != null){ stu = studentService.getStudentById(studentReq.getStudentId()); if (stu!=null){ logger.info(Thread.currentThread().getName() + " response data: " + stu.toString()); transaction = S_UtilsXml.getRepTransaction(byteBuf); transaction.getHeader().getStatus().setRetCd("000000"); transaction.getHeader().getStatus().setDesc("success"); repXml = S_UtilsXml.getRepXml(transaction,stu); }else { logger.info(Thread.currentThread().getName() + " response data is null"); transaction = S_UtilsXml.getRepTransaction(byteBuf); transaction.getHeader().getStatus().setRetCd("000000"); transaction.getHeader().getStatus().setDesc("数据不存在"); repXml = S_UtilsXml.getNoDataRepXml(transaction); } }else { logger.info(Thread.currentThread().getName() + " 请求报文数据内容为null"); transaction = S_UtilsXml.getRepTransaction(byteBuf); transaction.getHeader().getStatus().setRetCd("999999"); transaction.getHeader().getStatus().setDesc("false"); repXml = S_UtilsXml.getNoDataRepXml(transaction); } logger.info(Thread.currentThread().getName() + " 应答报文: " +repXml); return repXml; } }
2.通过反射机制调用对象
String repXml = ""; RepTransaction transaction = S_UtilsXml.getRepTransaction((String) msg); Class controller = Class.forName("com.yu.netty_esb.ServerController.GetStudentInfoController"); //创建对象 Object object = controller.newInstance(); Method method = controller.getMethod("GetStudentInfo",Object.class,RepTransaction.class);
3.反射机制的作用:让代码很具有通用性,可变化的内容都是写到配置文件当中,将来修改配置文件之后,创建的对象不一样,调用的方法也不同了,但是java代码不需要做任何的改动 。
getMethod(方法名,Object... args) invoke(Object obj,Object... args) 可变长参数 Object... args这就是可变长参数 语法是:类型...(注意:一定是3个点) 1.可变长参数要求的参数个数是:0~N个 2.可变长参数只能有一个,并且必须在参数列表的最后一个位置上 3.可变长数组可以当做一个数组来看待
分类:
java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~