1. 程式人生 > >Spring相關BUG

Spring相關BUG

creation under config web-inf 導致 text servlet The src

今天從雲開發平臺上生成的代碼報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

: Invalid property ‘kmBookCategoryService‘ of bean class [com.landray.kmss.km.book.service.spring.KmBookDetailServiceImp]: Bean property ‘kmBookCategoryService‘ is not writable or has an invalid setter method.

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