Spring框架,作為Java開源框架中的佼佼者,我們經常會利用他的IOC(Inverser of Control)容器和AOP(Aspect Oriented Programming)面向切面的編程來解決我們繁雜的業(yè)務層管理。
在使用Spring所提供的各項豐富而神奇的功能之前,我們必須在Spring IOC容器中裝配好Bean,并建立Bean和Bean之間的關聯(lián)關系。一般情況下,在配制bean時,需要為其指定一個id屬性作為Bean的名稱,在配置文件或程序中提供標識。id在IOC容器中必須是唯一的。呵呵我就犯過這樣的錯誤,找了老半天,汗顏啊^^。在Spring配置屬性時候發(fā)現(xiàn)的小問題,呵呵的確是有夠小的!
Spring配制文件
一般情況下。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可以不用修改,再運行發(fā)現(xiàn)沒有報錯了。OK,現(xiàn)在我們知道了。Spring的配置文件屬性名只對應于Bean類的get/setXxx()方法。針對于大寫字母開頭的變量名總顯得比較另類,其實象"QQ,MSN"之類的專業(yè)術語一律調整為小寫字母已保證命名的統(tǒng)一,也就可以減少出錯的幾率了。OK今天就寫到這里