您的位置:首页 > 编程语言 > Java开发

javabean属性名规范问题

2011-07-08 12:40 295 查看
Spring框架,作为Java开源框架中的佼佼者,我们经常会利用他的IOC(Inverser of Control)容器和AOP(Aspect Oriented Programming)面向切面的编程来解决我们繁杂的业务层管理。
在使用Spring所提供的各项丰富而神奇的功能之前,我们必须在Spring IOC容器中装配好Bean,并建立Bean和Bean之间的关联关系。一般情况下,在配制bean时,需要为其指定一个id属性作为Bean的名称,在配置文件或程序中提供标识。id在IOC容器中必须是唯一的。呵呵我就犯过这样的错误,找了老半天,汗颜啊^^。在Spring配置属性时候发现的小问题,呵呵的确是有够小的!
Spring配制文件 元素所指定的属性名和Bean实现类的Setter方法满足Sun公司的JavaBean的属性名规范,想必大家都清楚。我就不必废话了。xxx的属性名对应setXxx()的方法。
一般情况下。Java的属性变量名都已小写字母开头,如:userName,showMessage等,但也存在着特殊情况,考虑到一些特定的有意思的英文缩略词如(USA,XML等),JavaBean也允许大写字母起头的属性变量名,不过必须满足“变量的前两个字母要么全部大写,要么全部小写”的要求,如:IDCode、ICCard、idCode等属性变量名是合法的,而iC、iCcard、iDCode等属性变量名是非法的。正是由于这个原因造成了下面这种情况:
下面我们来做个测试看看,在Spring容器中配置一个类,为其注入属性,get/set方法为eclipse自动生成
public class Test {
//注意这是个非法的变量名
private String iDcode;
public String getIDcode() {
return iDcode;
}
public void setIDcode(String dcode) {
iDcode = dcode;
}
//测试
public static void main(String[] args) {
ApplicationContext ctx = new FileSystemXmlApplicationContext ("classpath:applicationContext.xml");
Test t = (Test) ctx.getBean("test");
System.out.println(t.getIDcode());
}
}
这是Spring配置文件中的配置

<beans>
<bean id="test" class="com.test.Test">
<property name="iDCode" value="123"></property>
</bean>
</beans>
让我们来运行下看看会发生什么情况,控制台打印出这么一句话:
Invalid property 'iDcode' of bean class [com.test.Test]: Bean property 'iDcode' is not writable or has an invalid setter method: Does the parameter type of the setter match the return type of the getter?

Spring给出了启动失败的错误原因,但是错误信息具有很强的误导性,因为他抱怨Test中没有提供对于iDocode的setter方法,但事实上我们提供了setIDcode()方法。那到底是怎么会事情呢?看看Spring的配置文件吧,它指定的就是我们所说的非法的属性名,而这个非法的属性名永远不可能有对应的Settter方法,因此错误就产生了。
下面我们改写配置文件为(粗体的地方为改变之处):
<beans>
<bean id="test" class="com.test.Test">
<property name="IDCode" value="123"></property>
</bean>
</beans>

而对于Test的属性iDcode可以不用修改,再运行发现没有报错了。OK,现在我们知道了。Spring的配置文件属性名只对应于Bean类的get/setXxx()方法。针对于大写字母开头的变量名总显得比较另类,其实象"QQ,MSN"之类的专业术语一律调整为小写字母已保证命名的统一,也就可以减少出错的几率了。OK今天就写到这里
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: