关于对spring注入的误解。。。

最近的项目中 spring配置的是default-autowire="byName" 
也就是按名称来注入bean
比如配了一个<bean id="userDate" class="...(省略)"/>
写代码的时候带上setUserData(.......)方法就能注入了
对于大多数情况来说 只要驼峰形式书写都是没问题的
但是,当bean的id第二个字母是大写字母的时候,就会出现问题
比如<bean id="xCreat" class="..(省略)"/>
set方法setXCreat(.....)
乍看没错,但就是注入不进去的,程序中对应的property就是NULL
一直以为这或许是spring的一个BUG(现在想想真是汗颜....)
今天看《ibatis in action》 偶然才发现原来sun对javabean是有规范的(据说有114页。。。)
其中有这样的规定
属性名 (假定String类型)                    set方法名                                           get 方法名
xcreat                                  void  setXcreat(String xcreat)                    String getXcreat()     【最普通的情况】
xCreat                                 void setxCreat(String xCreat)                   String getxCreat()
XCreat                                 void setXCreat(String XCreat)                   String getXCreat()
Xcreat                                  不允许                                                     不允许
显然 spring遵守了JavaBean的规范 遇到上面说的名为xCreat的bean时 注入时应该用的方法是setxCreat(.......),
而非MyEclipse自动生成的setXCreat(.......)方法
如果非要用第二个字母是大写的id 那么set方法就需要手动修改一下


posted @ 2009-08-21 21:45  PatrickYao  阅读(364)  评论(0)    收藏  举报