天天看點

關于Spring中配置LocalSessionFactoryBean來生成SessionFactory

學習Spring的過程中,一直不了解為何需要用LocalSessionFactoryBean來得到SessionFactory,Google之後發現有諸多童鞋有相似的問題,于是轉載來分享:

LocalSessionFactoryBean 本身不是一個session factory,但是spring會自動把對這個bean的引用替換成LocalSessionFactoryBean 裡面的真正的session factory。

No.1

具體解釋一下: 

在LocalSessionFactoryBean 這個class裡面有個字段是存放真正的session factory的:

  1. publicclass LocalSessionFactoryBean implements FactoryBean, InitializingBean, DisposableBean {   
  2.     private SessionFactory sessionFactory;   
  3.     public Object getObject(); {   
  4.         returnthis.sessionFactory;   
  5.      }  

當引用這個LocalSessionFactoryBean 的時候,比如applicationContext.getBean("localSessionFactoryBean ")這樣,spring傳回的不是LocalSessionFactoryBean 本身,他會自動調用getObject()這個方法,把真正的session factory傳回。用<ref bean="">這樣引用也一樣,得到的都是session factory而不是LocalSessionFactoryBean 。這裡代碼沒貼全,有興趣的話去看看源代碼。 

是以不需要再顯式地建立一個session factory,直接引用LocalSessionFactoryBean 就可以了。

No.2

LocalSessionFactoryBean實作了org.springframework.beans.factory.FactoryBean接 口, spring在裝配的時候, 如果發現實作了org.springframework.beans.factory.FactoryBean接口, 就會使用FactoryBean#getObject() 方法傳回的對象裝配,具體的可以看下文檔. 

如果你想拿到LocalSessionFactoryBean執行個體, 在id前面加個'&'就可以了,在你的配置檔案中BeanFactory.getBean('&sessionFactory')拿到的 就是LocalSessionFactoryBean的執行個體.

繼續閱讀