定義布林屬性 private boolean isShowCode;,Eclipse 自動產生:
public boolean isShowCode() { return isShowCode; }
public void setShowCode(boolean isShowCode) { this.isShowCode = isShowCode; }
Spring 注入時拋出:NotWritablePropertyException: Invalid property 'isShowCode' ... Did you mean 'showCode'?
Introspector.getBeanInfo() 取得屬性描述器。<propertyName> 的讀取器可用 is<PropertyName>() 替代 get<PropertyName>()。isShowCode,Introspector 推導出的屬性名為 showCode (去掉 "is" 並將 S 小寫)。setShowCode (對應屬性 showCode),getter 為 isShowCode (對應屬性 showCode)。Spring 嘗試寫入 isShowCode (來自配置 <property name="isShowCode">),找不到對應 setter,故報錯。| 屬性名模式 | 範例 | Getter | Setter | Introspector 推導屬性名 |
|---|---|---|---|---|
| 標準駝峰 (首字母小寫,第二單詞大寫) | showCode | getShowCode() / isShowCode() | setShowCode() | showCode |
| 布林屬性慣用 is 開頭 (不推薦) | isShowCode | isIsShowCode() ❌ | setIsShowCode() ❌ | showCode (易混淆) |
| 單字母開頭 (eBook, pName) | pName | getPName() / getpName() (Eclipse 版本差異) | setPName() / setpName() | pName / PName (版本差異) |
| 雙大寫開頭 (XMLParser) | XMLParser | getXMLParser() | setXMLParser() | XMLParser |
| 首字母大寫 (PropertyName) | PropertyName | getPropertyName() | setPropertyName() | PropertyName (Spring 3.1 可工作,但違反 JSR) |
showCode、enabled、visible 等語意清晰名稱。eBook → electronicBook 或 ebook。getPName(),3.5+ 可能產生 getpName();建議手動確認或統一團隊 IDE 版本。showCode,配置 <property name="showCode">。單元測試同時用原始 JavaBean 呼叫與 Spring 容器注入,確認兩種方式行為一致。
遵循命名規範,可避免反射/內省機制的誤判,減少莫名其妙的運行時錯誤。