天天看點

一個模拟Spring将SessionFactory注入到HibernateTemplate的小例子

先看一段常見的Spring+Hibernate內建的配置檔案

<bean name="hibernate.sessionFactory" 

       class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

        <property name="dataSource" ref="system.datasource"/>

        <property name="cacheProvider" ref="hibernate.cacheProvider"/>

        ......

</bean>

<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">

        <constructor-arg ref="hibernate.sessionFactory"/>

</bean>

從AnnotationSessionFactoryBean命名我們知道這個是個FactoryBean,Spring中工廠Bean跟普通的Bean注入是有差別的;普通的Bean是通過Setxxx、Getxxxx或者構造器的方式,直接根據類型比對就能注入。但是工廠Bean-AnnotationSessionFactoryBean跟SessionFactory根本不是同一個類型,但是他們依然能夠實作注入,原因是工廠Bean重寫了getObject()方法,此方法會傳回一個SessionFactory,這樣就能通過構造器的方式順利的注入到HibernateTemplate中了。

附件是個Maven項目的小例子,簡單的模拟了Spring将SessionFactory注入到HibernateTemplate中的過程。