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