Spring下如何配置bean
Posted sky_烁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring下如何配置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类中
注:这仅仅是我个人的理解,如有不同意见,请告知……
以上是关于Spring下如何配置bean的主要内容,如果未能解决你的问题,请参考以下文章
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段