2017-01-13 17 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> 

を、私は次のコードでEntityManagerFactoryオブジェクトとして、このBeanを取得できます。これはどのように

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

可能?

LocalContainerEntityManagerFactoryBeanEntityManagerFactoryを実装していません。

これはどのように正確に機能しますか?

+0

'LocalContainerEntityManagerFactoryBean'は、「Springアプリケーションコンテキスト内でローカルJPAの' EntityManagerFactory'インスタンスを作成する抽象FactoryBean」を意味する「AbstractEntityManagerFactoryBean」を拡張しています。* – user2004685

答えて

2

チェーンは以下の通りです:LocalContainerEntityManagerFactoryBean extends AbstractEntityManagerFactoryBeanFactoryBean<EntityManagerFactory>を実装していますので、EntityManagerFactoryを取得しています。

EntityManagerFactory実際にApplicationContextからEntityManagerFactoryが作成されており、それは適切なFactoryBeanで作成されています。

詳細はFactoryBeanのドキュメントを参照してください。

+0

ああ、「FactoryBean」のドキュメントにあります:A ' FactoryBean'はBeanスタイルで定義されていますが、Bean参照で公開されるオブジェクト( 'getObject()')は常に作成するオブジェクトです。ありがとう。 – justanoob

関連する問題