Spring中是否强制为每个声明的bean指定一个id?

时间:2015-02-25 16:06:47

标签: java spring spring-mvc

我正在攻读Spring Core认证,我对这个老考试模拟得到的以下问题有疑问(这与Spring v3有关,现在有v4,但我认为很多主题是相同的)

鉴于以下Spring配置文件,正确的答案是什么:

<bean class ="com.spring.service.MyServiceImpl">
    <property name="repository" ref="jpaDao" />
</bean>

<bean class="com.spring.repository.JpaDao"/>
  1. 第一个声明的bean MyServiceImpl缺少id必须命名为myService。

  2. 第二个声明的bean JpaDao缺少一个id必须命名为jpaDao

  3. 答案1和2都是权利

  4. 答案1和2都错了

  5. 我最初的想法是答案都是正确的,因为bean都没有指定id,所以如果第二个bean需要 id = jpaDao ,因为第一个使用它作为参考我以为第一个也需要一个id。否则它怎么称呼? (也在工厂的代码中?)

    但是阅读anser找到了模拟器,它说正确的答案是第二个。

    那意味着什么?在Spring中不是mandatary为每个bean指定一个id?如果确实如此,如果它没有id,我如何使用工厂引用或实例化第一个bean?我错过了什么?

    TNX

1 个答案:

答案 0 :(得分:3)

这是一个棘手的问题。 Spring知道默认情况下会自动创建ID。因此,以下定义是正确的:

<bean class="com.spring.repository.JpaDao"/> 

但是,最佳创建bean ID是完全限定的类名。但是,您的第一个bean引用ID为jpaDao的bean。这意味着你需要这样的bean。确保这一点的方法是明确定义id:

<bean id="jpaDao" class="com.spring.repository.JpaDao"/> 

这就是第二个答案是正确的原因。