本次講述項目背景: 創建Service類,Service下用到dao類。通過在Spring中配置bean,實現在項目啟動時,自動載入這個類 本次只講述配置bean的註意事項,故只給出簡單實例: 創建Service: 在applicationContext.xml下配置bean: 當配置結束後,系統一 ...
本次講述項目背景:
創建Service類,Service下用到dao類。通過在Spring中配置bean,實現在項目啟動時,自動載入這個類
本次只講述配置bean的註意事項,故只給出簡單實例:
創建Service:
public class UserService { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } public void init(){ …… } }
在applicationContext.xml下配置bean:
<bean id="userService" class="com.gcs.service.UserService" init-method="init"> <property name="config" > <ref local="UserDao" /> </property> </bean> <bean id="UserDao" class="com.gcs.dao.UserDao"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean>
當配置結束後,系統一直報錯,報錯信息如下:
org.springframework.beans.NotWritablePropertyException: Invalid property 'config' of bean class []: Bean property 'config' is not writable or has an invalid setter method.Does the parameter type of the setter match the return type of the getter?
經過排查,發現問題原因:
<bean id="userService" class="com.gcs.service.UserService" init-method="init"> <property name="config" > --此處配置的name,應為userDao;與配置的類的實例名保持一致 <ref local="UserDao" /> </property> </bean>
public class UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void init(){
……
}
}
我的理解是這樣的,在Java中從這個類操作另一個類,需要實例化,也就是 UserDao userDao=new UserDao();通過new出來的對象userDao來操作這個類,
而Spring通過配置,省去了去手動new,通過配置bean把dao類註入到service類中,但bean也應該符合Java面向對象的規則。
配置的bean中,<ref local="UserDao" /> 指向的是叫做UserDao的bean,相當於指向UserDao類,而<property name="userDao" > 則相當於獲取實例化後的對象。
這樣就成功的把dao類註入到service類中
註:這僅僅是我個人的理解,如有不同意見,請告知……