Java从另一个实例反射地创建实例

时间:2020-10-29 15:24:49

标签: java reflection

我正在编写一个任务执行框架,结构如下:

@XmlRoot("")
class PayloadPojo {
    String cron;
    String name;
    int id;
    String user;
}

@Task(payload = PayloadPojo.class)
class MyTask {
    String cron;
    String user;
    int id;
    ...
    // other fields;

    // Task execution logic
}

@CallBack(task = MyTask.class)
class MyCallBack {...}

我试图在此处编写一个简单的框架,用户可以定义自己的有效载荷POJO来绑定来自远程事件的数据,并使用提供的注释定义要在该数据上运行的任务。假设调用回调时,传入了String有效负载,我可以反射地将回调的目标任务类作为任务的有效负载PO​​JO。

问题是,如何通过比较字段名并复制相同的字段名来实例化MyTask实例中的PayloadPojo。我的逻辑如下:

// In MyCallBack class
public MyTask getTask(String payloadStr) {
    Class callbackCls = AopUtils.getTargetClass(this);

    if (clazz.isAnnotationPresent(CallBack.class)) {
         // Get task param, which is MyTask.class, and then get its payload: PayloadPojo.class
         // Deserialize to PayloadPojo instance
         Class taskCls = callbackCls .getAnnotation(CallBack.class).task();
         Class payloadCls = taskCls.getAnnotation(Task.class).payload();
         Object payload = payloadCls.cast(ummarshaller.ummarshall(payloadStr));

         // Here is my question:
         // Need to create instance of taskCls from payload object
         // Note the payload is of type Object
         return myTaskInstance;
    }
    return null;
}

这里的逻辑是POJO类和Task类应该具有一些相同的字段(因为任务执行依赖于回调中的数据)。但是要获得更好的模块化,仍然需要专用的POJO类。

0 个答案:

没有答案
相关问题