2017-01-13 19 views
0

我有一個文件中的下列bean定義稱爲的beans.xml爲什麼我可以從LocalContainerEntityManagerFactoryBean bean定義中獲取一個EntityManagerFactory對象?

<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

'LocalContainerEntityManagerFactoryBean'擴展了'AbstractEntityManagerFactoryBean',它表示*「抽象FactoryBean在Spring應用程序上下文中創建一個本地JPA'EntityManagerFactory'實例。」* – user2004685

回答

2

鏈條如下:LocalContainerEntityManagerFactoryBean extends AbstractEntityManagerFactoryBean它實現了FactoryBean<EntityManagerFactory>,因此你得到你的EntityManagerFactory

實際上,您正在請求ApplicationContext中的EntityManagerFactory,其中EntityManagerFactory已由適當的FactoryBean創建。

有關更多詳細信息,請參閱FactoryBean文檔。

+0

啊我看到了,它在'FactoryBean'的文檔中找到了:'' FactoryBean'在bean風格中定義,但爲bean引用公開的對象('getObject()')始終是它創建的對象。謝謝。 – justanoob

相關問題