怎样通过反射机制调用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.可变长数组可以当做一个数组来看待

浙公网安备 33010602011771号