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 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试