Spring相關BUG
今天從雲開發平臺上生成的代碼報Spring相關的錯誤。
我找到第一處錯誤,整理如下:
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name ‘kmBookDetailTarget‘ defined in ServletContext resource [/WEB-INF/KmssConfig/km/book/spring.xml]: Error setting property values;
nested exception is org.springframework.beans.NotWritablePropertyException
Does the parameter type of the setter match the return type of the getter?
首先翻譯一遍:
創建定義在這個spring.xml文件裏面,名為‘kmBookDetailTarget‘的bean時出錯:設置屬性值時出錯;
嵌套異常為這個Exception:這個bean類的屬a性‘kmBookCategoryService‘無效:bean屬性‘kmBookCategoryService‘是不可寫或者有一個無效的setter方法。
setter的參數類型是否與getter的返回類型匹配?
然後確定了導致錯誤的起源在這個spring.xml文件,並且找到‘kmBookDetailTarget‘這個bean,然後找到這個bean裏面的屬性‘kmBookCategoryService‘,如圖:
bean每註入一個屬性,我們都要在這個bean對應的class中定義setter方法,我們找到這個class,如圖:
發現沒有任何setter方法。其實baseDao這個屬性應該是在框架中已經setter過了,即父類中定義了,而我們自定義的屬性‘kmBookCategoryService‘並沒有定義,因此才導致錯誤。
解決辦法:
刪掉該屬性,如圖:
clean項目,重新啟動,OK!
------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------
那麽如果我不刪除spring配置,該如何做?
應該在對應的類裏面添加setter方法,如圖:
重新啟動,欸~都挺好,也OK!
------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------
但如果,我就是要刪除這個spring配置,但是以後我還是想要用這個屬性怎麽辦?
我們可以通過另外一種辦法使用:
SpringBeanUtil是我們封裝的類,針對這個方法的代碼如下:
private static ApplicationContext applicationContext = null;
public static Object getBean(String beanName) {
if (applicationContext == null)
return null;
return applicationContext.getBean(beanName);
}
好不好用測試才行,很不幸,我們框架沒有單元測試(我自己也不會搞),於是我從前端寫了一個ajax,然後到action層調service,最後在serviceImp調test方法測試。
結果測試可行!
Spring相關BUG