以前经常看到网上和书上说,struts2 action中的属性中要写相对应的setXXx,getXXx方法才能接收到网页中传来的参数!
无意中发现,属性没有写set get 方法,依然会注入值和取到值.
甚是不解,求助于网上依然没有得到解决!
花了点时间看了下源码!
发现:
struts2 参数拦载器在注入值的时候,有两种机制,(调用ognl)
这是OgnlRuntime 类中一段源码 hasSetMethod( context, target, targetClass, name ) || hasField( context, target, targetClass, name );
http://blog.sina.com.cn/u/1866397122
无意中发现,属性没有写set get 方法,依然会注入值和取到值.
甚是不解,求助于网上依然没有得到解决!
花了点时间看了下源码!
发现:
struts2 参数拦载器在注入值的时候,有两种机制,(调用ognl)
这是OgnlRuntime 类中一段源码 hasSetMethod( context, target, targetClass, name ) || hasField( context, target, targetClass, name );
他会先查看你的action 中有没有对应的方法,如果发现无此方法,他会利用第二种方法直接给属性覆值,而无需对应的set方法!(当然都是通过反射机制实现的)
from:
东avaj东的博客
http://blog.sina.com.cn/u/1866397122
本文探讨了Struts2框架中Action类参数的注入过程,揭示了即使未提供set/get方法,框架也能通过反射机制为属性赋值的现象。解析了Struts2拦截器使用的两种参数注入机制,并解释了其背后的实现原理。

210

被折叠的 条评论
为什么被折叠?



