java 我可以使用OGNL动态创建对象和设置属性吗?

xoshrz7s  于 2023-06-28  发布在  Java
关注(0)|答案(1)|浏览(122)

我正在开发一个系统,用于将接收到的结构化消息动态Map到Java对象。目前,我通过XML模式来实现这一点,该模式具有以下典型格式:

<mapping>
  <domainObject>company.app.MyObject</domainObject>
  <attribute>
    <domainAttribute>myAttr</domainAttribute>
    <messageAttribute>root/config/component/param1</messageAttribute>
  </attribute>
</mapping>

因此,接收到的消息具有层次结构,该结构Map到特定的域对象属性。对于上面的例子,我将消息元素root/config/component/param1Map到域属性MyObject.myAttr
我已经开发了实现这一点的代码,但是在阅读了Struts2及其对OGNL的使用之后,它似乎也在做同样的事情。**我的问题是,OGNL能否动态地构造必要的对象,然后填充所有必要的属性?如果是,如何做到这一点?**从API文档来看,似乎必须自己构建对象。例如,如果我使用这样的OGNL表达式

rootObj.childObj.param1

理想情况下,我希望OGNL服务构造对象rootObj,然后是childObj,然后设置属性param1。这正是Struts将Http请求参数传输到域对象的方式,因此动态对象创建一定在某处发生。然而,在对OGNL表达式进行了一些实验之后,没有发生对象创建,并且我得到了null对象异常。

jhkqcmku

jhkqcmku1#

OGNL不会构造您的对象。它主要用于并最终用于计算表达式。创建对象是您或使用ObjectFactory创建对象的框架的责任:
框架创建的所有对象都由ObjectFactory示例化。ObjectFactory提供了将框架与Spring、皮科、Plexus等IoC容器集成的方法。

相关问题