我在名为 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
。
这是如何工作的?
答案 0 :(得分:2)
链条如下:from module import method
method()
实施LocalContainerEntityManagerFactoryBean extends AbstractEntityManagerFactoryBean
,因此您获得了FactoryBean<EntityManagerFactory>
。
事实上,您正在EntityManagerFactory
请求EntityManagerFactory
已ApplicationContext
已由EntityManagerFactory
创建的FactoryBean
。
有关详细信息,请参阅FactoryBean文档。