qq_27658069 2015-08-25 06:53 采纳率: 100%
浏览 2504
已结题

spring配置set注入时,properties中的name只能使用先前配置过的bean的id。

 <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就行了。还是想请问一下有谁知道是什么问题吗?
谢谢各位!

  • 写回答

3条回答 默认 最新

  • 丵鹰 2015-08-25 07:05
    关注
      <property name="baseDao" ref="employeeDao"/>
    name是写在你类中的名称baseDao,ref是你写在类中名称baseDao对应的bean的id
    
    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?