struts2 属性不用get set什么情况下不起作用

struts2 action中的属性中要写相对应的setXXx,getXXx方法才能接收到网页中传来的参数!

但属性没有写set get 方法,依然会注入值和取到值.

struts2 参数拦载器在注入值的时候,有两种机制,(调用ognl)

这是OgnlRuntime 类中一段源码 hasSetMethod( context, target, targetClass, name ) || hasField( context, target, targetClass, name );

他会先查看你的action 中有没有对应的方法,如果发现无此方法,他会利用第二种方法直接给属性覆值,而无需对应的set方法!(当然都是通过反射机制实现的)

如果action 中属性过多的话,我觉得就不用写set get 方法了


但是重点来了,什么情况下不适用呢,最近开发的时候发现项目里面的属性都不能用了,必须写get ,set了。

后来发现原来项目中加了切面拦截
@Aspect
@Repository
public  class SystemLogAspect

这个导致必须写 get set ,在此写给困惑的同学们

你可能感兴趣的:(struts2)