Spring JPA 4.2.1
嵌套bean定义如下所示但得到
NoSuchBeanDefinitionException
:
“没有定义[javax.persistence.EntityManagerFactory]类型的限定bean”
<bean id="tm" class="...JpaTransactionManager">
<property name="entityManagerFactory">
<bean class="...LocalContainerEntityManagerFactoryBean">
<property name="dataSource">
<bean class="...BasicDataSource"
p:driverClassName="..." p:url="...">
</bean>
</property>
</bean>
</property>
</bean>
下面只有平面定义,为什么?
<bean id="tm" class="...JpaTransactionManager">
<property name="entityManagerFactory" ref="emf" />
</bean>
<bean id="emf" class="...LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="ds" />
</bean>
<bean id="ds" class="...BasicDataSource"
p:driverClassName="..." p:url="...">
</bean>
答案 0 :(得分:1)
其他一些bean也需要EntityManagerFactory
(哪一个,我不能说 - 你没有显示完整的堆栈跟踪)。 inner beans是匿名的,无法使用BeanFactory.getBean()
或@Autowired
检索它们,这就是为什么在第一种情况下会出现此错误的原因。
内部bean 始终匿名,并且始终使用外部bean创建。 不可以将内部bean注入协作bean而不是封闭bean。
在第二种情况下,EntityManagerFactoryBean
不是内部bean,可以被任何其他bean使用。