在上篇我们提到了使用SetAndGet注解进行自动生成set/get方法,那么在开发模式下, 我们所使用的IDE,在进行了代码修改之后,会自动地进行重新编译代码并进行hotswap操作。这个操作会使得在启动时生成的set/get失效或者被删除。解决这个问题的一个方法,就是使用字段级参数注入,即我们在开发模式下不需要生成set/get,而是直接使用相应的字段进行操作。
在当前的struts2版本中,默认是不支持字段设置值的,但是ognl本身是支持的。在ognl中,提供了以下2个方法来完成字段的获取和设置。
OgnlRuntime.setFieldValue(ognlContext, o, name.toString(), value);//设置字段的值 OgnlRuntime.getFieldValue(ognlContext, o, name.toString());//获取字段的值
那么,我们可以通过相应的处理。让在开发模式下,在使用常规参数处理之后,再启用字段级参数处理就达到相应的目的了。在整个处理中,我们需要保证以下2点就可以达到目的了。
- 在action进行参数注入时,可以支持字段级的注入,涉及的访问器为CompoundRootAccessor
- 在相应的字段为null时,我们可以按照常规的处理自动创建相应的值,以便进行注入,涉及的处理器为InstantiatingNullHandler