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

 

posted @   会飞的猪仔  阅读(164)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示