我在名为beans.xml的文件中具有以下bean定义:

<bean id="entityManager"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="mypackagename" />
    <property name="persistenceProviderClass"
        value="org.hibernate.jpa.HibernatePersistenceProvider" />
    <property name="jpaPropertyMap">
        <map>
            <entry key="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <entry key="hibernate.hbm2ddl.auto" value="update" />
        </map>
    </property>
</bean>


我可以使用以下代码将此bean作为EntityManagerFactory对象获取:

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
EntityManagerFactory emf = context.getBean(EntityManagerFactory.class);


这怎么可能?

如我所见,LocalContainerEntityManagerFactoryBean没有实现EntityManagerFactory

究竟如何运作?

最佳答案

链如下:LocalContainerEntityManagerFactoryBean extends AbstractEntityManagerFactoryBean实现FactoryBean<EntityManagerFactory>,因此您得到了EntityManagerFactory

实际上,您是从EntityManagerFactory请求ApplicationContext的,而该EntityManagerFactory已经具有由适当的FactoryBean创建的。

有关更多详细信息,请参考FactoryBean文档。

09-11 18:35