由Spring JPA的嵌套bean定义引起的NoSuchBeanDefinitionException

时间:2015-10-02 23:15:18

标签: xml spring jpa

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>

1 个答案:

答案 0 :(得分:1)

其他一些bean也需要EntityManagerFactory(哪一个,我不能说 - 你没有显示完整的堆栈跟踪)。 inner beans是匿名的,无法使用BeanFactory.getBean()@Autowired检索它们,这就是为什么在第一种情况下会出现此错误的原因。

  

内部bean 始终匿名,并且始终使用外部bean创建。 可以将内部bean注入协作bean而不是封闭bean。

在第二种情况下,EntityManagerFactoryBean不是内部bean,可以被任何其他bean使用。