PDA

View Full Version : How does the LocalSessionFactoryBean convert to SessionFacto



hucmuc
Sep 1st, 2004, 06:12 PM
My appContext has the following:

<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFact oryBean">
<property name="dataSource"><ref bean="dataSource"/></property>
<property name="mappingResources">
<list>
<value>org/appfuse/model/User.hbm.xml</value>
</list>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">net.sf.hibernate.dialect.PostgreSQLDialect</prop>
</props>
</property>
</bean>

<bean id="userDAO" class="org.appfuse.persistence.hibernate.UserDAOHibernate">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>


If I look at the setSessionFactory in HibernateDAOSupport the type of the argument is net.sf.hibernate.SessionFactory. However, my sessionFactory in the configuration file is of type org.springframework.orm.hibernate.LocalSessionFact oryBean. LocalSessionFactoryBean is not a descendant of SessionFactory. How does spring convert this?

Dino

irbouho
Sep 1st, 2004, 07:03 PM
First of all org.springframework.orm.hibernate.LocalSessionFact oryBean is a factory, it implements interface FactoryBean.
When you ask Spring for a bean from your applicationContext (or references this bean in an other), Spring first checks the nature of your bean, if it implements interface FactoryBean, it will be treated as a factory, thus, Spring calls bean method getObject() and returns the object returned by that method.
If you look at org.springframework.orm.hibernate.LocalSessionFact oryBean source you will find:


public class LocalSessionFactoryBean implements FactoryBean, InitializingBean, DisposableBean &#123;
...
private SessionFactory sessionFactory;
...

/**
* Return the singleton SessionFactory.
*/
public Object getObject&#40;&#41; &#123;
return this.sessionFactory;
&#125;
&#125;