我正在攻读Spring Core认证,我对这个老考试模拟得到的以下问题有疑问(这与Spring v3有关,现在有v4,但我认为很多主题是相同的)
鉴于以下Spring配置文件,正确的答案是什么:
<bean class ="com.spring.service.MyServiceImpl">
<property name="repository" ref="jpaDao" />
</bean>
<bean class="com.spring.repository.JpaDao"/>
第一个声明的bean MyServiceImpl缺少id必须命名为myService。
第二个声明的bean JpaDao缺少一个id必须命名为jpaDao
答案1和2都是权利
答案1和2都错了
我最初的想法是答案都是正确的,因为bean都没有指定id,所以如果第二个bean需要 id = jpaDao ,因为第一个使用它作为参考我以为第一个也需要一个id。否则它怎么称呼? (也在工厂的代码中?)
但是阅读anser找到了模拟器,它说正确的答案是第二个。
那意味着什么?在Spring中不是mandatary为每个bean指定一个id?如果确实如此,如果它没有id,我如何使用工厂引用或实例化第一个bean?我错过了什么?
TNX
答案 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"/>
这就是第二个答案是正确的原因。