之前用Spring的注解模式配置Hibernate的时候觉得很简单。
使用@autowire 自动注入
@Autowired
private SessionFactory sessionFactory;
然后在方法中直接使用
Session session = sessionFactory.getCurrentSession()
但是,后来看源码的时候却有了疑问。
在XML配置文件中, bean 的配置里面 SessionFactory 映射的 类文件是org.springframework.orm.hibernate4.LocalSessionFactoryBean
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
然而打开 LocalSessionFactoryBean 类中的代码,却没有发现getCurrentSession()这个方法。
后来查询资料才发现真正的原因。
LocalSessionFactoryBean 实现了 接口 FactoryBean,FactoryBean中有一个方法 : getObject()
根据Bean的Id, 从BeanFactory中获取的实际上是FactoryBean的getObject()返回的对

本文探讨了Spring如何通过自动注入方式配置Hibernate的SessionFactory。在XML配置中,SessionFactory通常被映射到一个类文件,但在实际的SessionFactoryBean中并未找到对应方法。研究发现,SessionFactoryBean实现了FactoryBean接口,通过getObject方法返回SessionFactory实例。进一步深入,SessionFactoryBean还实现了InitializingBean接口,用于在Bean初始化时进行操作。关键在于defaultListableBeanFactory的getBean方法,它装配了SessionFactory。最终,SessionFactory的真正实现是在Configuration类的buildSessionFactory方法中完成。
最低0.47元/天 解锁文章
1014

被折叠的 条评论
为什么被折叠?



