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
    
    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料