Java Bean属性命名规范问题分析
Eclipse根据这种方式生成getter访问器和setter设值器,由于属性名isShowCode的is 没有去掉,以致java bean类违背了java bean 的命名规范。
问题由来:
最近在一个java bean类中定义了一个boolean类型的变量:
1.//boolean属性:是否显示
2.private boolean isShowCode ;
3.
4.//使用Eclipse自动生成getter/setter方法如下:
5.public boolean isShowCode() {
6.return isShowCode;
7.}
8.public void setShowCode(boolean isShowCode) {
9.this.isShowCode = isShowCode;
10.}
spring在给java bean 设置值的时候,抛出异常:
1.Caused by: org.springframework.beans.NotWritablePropertyException:
2.Invalid property 'isShowCode' of bean class [com.codemouse.beans.Count
ry]:
3.Bean property 'isShowCode' is not writable or has an invalid setter me
thod.
4.Did you mean 'showCode'?
5.at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrap
perImpl.java:1064)
代码运行环境: jdk 1.6 + eclipse 3.2 + spring 3.1, 本文下面的代码都在该环境下测试。
原因跟踪分析:跟踪Spring源码,可以看到下面这段代码:
1.private CachedIntrospectionResults(Class beanClass,
2.boolean cacheFullMetadata) throws BeansException {
3. ... ...
4.this.beanInfo = new ExtendedBeanInfo(Introspector.getBeanInfo(bean
Class));
5. ... ...