为什么LocalSessionFactoryBean不实现getCurrentSession,同时SessionFactory的实例可以调用方法?

时间:2014-03-09 14:23:54

标签: spring hibernate session code-injection

这是我对Spring Bean的配置:

<bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

然后我在DAO层中使用它,如下所示:

    @Resource(name = "sessionFactory")
    private SessionFactory sessionFactory;

最后,我的问题来自:

    public T getById(int id) {
        Session session = sessionFactory.getCurrentSession();
    return (T) session.get(clz, id);
    }

总之,我的问题是:

在课程"org.springframework.orm.hibernate4.LocalSessionFactoryBean"中,SessionFactory's方法没有实施 - “getCurrentSessio”。

我跟踪了LocalSessionFactoryBean's层次系统,但我找不到方法“getCurrentSession”的实现。

我非常期待你的回答!

2 个答案:

答案 0 :(得分:3)

工厂bean,正如其名称所示,充当工厂。它的作用是创建另一种类型的bean。 Spring注入了这个工厂bean的产品,即工厂bean创建的对象。 LocalSessionFactoryBean生成SessionFactory

有关详情,请参阅the documentation

答案 1 :(得分:2)

你没看到

  

LocalSessionFactoryBean的getCurrentSession()

来自api docs here

的结果
  

受保护的抽象SessionFactory buildSessionFactory()                                                  抛出异常

构建底层的Hibernate SessionFactory。 返回: 原始的SessionFactory(可能在它暴露给应用程序之前用事务感知代理包装) 并查看this

  

默认情况下,这个工厂bean会公开一个事务感知的SessionFactory代理,让数据访问代码可以使用普通的Hibernate SessionFactory及其getCurrentSession()方法,同时仍然可以参与当前的Spring管理的事务: