我正在使用Spring 4.2.1
并且Hiberante 5
现在试图了解spring如何初始化在Spring Beans定义中声明的Session,如下所示:
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- properties -->
</bean>
我发现所谓的org.springframework.orm.hibernate5.LocalSessionFactoryBean实现了FactoryBean<SessionFactory>
。考虑到这一点,很明显为什么我们定义SessionFactory
要注入类org.springframework.orm.hibernate5.LocalSessionFactoryBean
但最终以SessionFactory
. 现在,我感到困惑的是getCurrentSession方法:
public Session getCurrentSession() throws HibernateException {
if ( currentSessionContext == null ) {
throw new HibernateException( "No CurrentSessionContext configured!" );
}
return currentSessionContext.currentSession();
}
它将实际会话创建委托给SpringSessionContext,在我的情况下,它被这段代码检索:
SessionHolder sessionHolder = (SessionHolder) value;
Session session = sessionHolder.getSession();
但session
它实际上是org.hibernate.internal.SessionImpl
直接基类org.hibernate.internal.AbstractSessionImpl
的一个实例,它本身具有受保护的瞬态 SessionFactoryImpl factory属性。
因此,在我的情况下,它SessionFactory
拥有的CurrentSessionContext
属性SessionHolder
又拥有实际的Session
实例。但是SessionImpl
another 具有 type 的属性SessionFactory
。
我无法理解通函。你能不能解释一下。