为什么我可以从LocalContainerEntityManagerFactoryBean bean定义中获取EntityManagerFactory对象?

时间:2017-01-13 19:41:37

标签: java spring

我在名为 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

这是如何工作的?

1 个答案:

答案 0 :(得分:2)

链条如下:from module import method method() 实施LocalContainerEntityManagerFactoryBean extends AbstractEntityManagerFactoryBean,因此您获得了FactoryBean<EntityManagerFactory>

事实上,您正在EntityManagerFactory请求EntityManagerFactoryApplicationContext已由EntityManagerFactory创建的FactoryBean

有关详细信息,请参阅FactoryBean文档。