<bean id="EmployeeAction" scope="prototype" class="com.tw.web.action.EmployeeAction">
<property name="employeeDao" ref="employeeDao"/>
<property name="baseDao" ref="employeeDao"/>
<property name="dao" ref="employeeDao"/>
</bean>
以上三种情况:
第一种(employeeDao):可以正确注入
第二种(baseDao):由于配置中有一个id="baseDao"的抽象bean,所以会报错:baseDao这bean是一个抽象bean。
第三种(dao):根本不进入set中。
先前我一直纳闷为什么name和ref的字符串不一样就不能够正确注入。直到看到第二种配置报的错,才发现name直接就对应了配置中bean的id了。
是这样的:
我的配置中确实存在一个id="baseDao"的抽象类
但是在注入时,baseDao只是一个属性。相当于:
public void setBaseDao(IEmployeeDao employeeDao){}
我的配置是:
<property name="baseDao", ref="employeeDao" />
那么Spring按理应该是通过ref去找id="employeeDao"的bean然后注入到setBaseDao中。
但是我遇到的问题是,Spring是通过name去找id="baseDao"的bean。
另外,
<property name="id", value="1" />
这样的形式也不行。
奇怪的是,配置SessionFactory的时候并没有问题。
刚刚在相关提问中找到一个解决方法:把Struts配置中的class="类全限定名",改成Spring配置的bean的id就行了。还是想请问一下有谁知道是什么问题吗?
谢谢各位!
<property name="baseDao" ref="employeeDao"/>
name是写在你类中的名称baseDao,ref是你写在类中名称baseDao对应的bean的id
抽象的bean无法被实例化的,当然它也不存在id,name等属性了,这些是在没学习框架之前就知道的,现在你用设值注入来为一个抽象的类创建对象并初始化,怎么可以呢?
注入时候 name 和 之前配置的id 是没有关系的,只要是相同的类型就行了。但是你的EmployeeAction 里面的set方法要与name一致
setBaseDao (employeeDao baseDao){ this.baseDao =baseDao;}