2010-04-29 20 views
23

我想在我的非Spring代码中获得Spring定义的Hibernate配置和SessionFactory对象。以下是我的applicationContext.xml文件的定义:如何从Spring获取Hibernate配置对象?

代码:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="hibernateProperties"> 
    <props> 
     <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
     <prop key="hibernate.show_sql">true</prop> 
     <prop key="hibernate.hbm2ddl.auto">update</prop> 
     <prop key="hibernate.cglib.use_reflection_optimizer">true</prop> 
     <prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop> 
    </props> 
    </property> 
    <property name="dataSource"> 
    <ref bean="dataSource"/> 
    </property> 
    </bean> 

如果我现在请的getBean(“SessionFactory的”),我回到这似乎是一个代理一个$ Proxy0对象Hibernate的SessionFactory对象。但这不是我想要的 - 我需要LocalSessionFactoryBean本身,因为我需要访问配置以及SessionFactory。

我需要Configuration对象的原因是我们的框架能够使用Hibernate的动态模型在运行时自动插入映射;这要求我们改变配置并重建SessionFactory。实际上,我们所要做的就是获取Spring中已经存在的Hibernate配置,以便那些已经在Spring中拥有这些信息的客户不必将其复制到hibernate.cfg.xml文件中,以便使用我们的Hibernate功能。

+0

你如何重建sessionFactory?在调用销毁之前,您如何确保所有现有交易都已完成? – banterCZ 2013-01-08 10:11:46

回答

38
Spring容器的

一个不起眼的特点是the & prefix

当你需要问一个容器 实际FactoryBean实例 本身,而不是它产生豆,你 前言豆ID与&符号 符号&(不含引号) 调用getBean方法 ApplicationContext。因此,对于一个给定的 FactoryBeanmyBean一个id, 的 容器上调用getBean("myBean")返回 FactoryBean的产品,并调用 getBean("&myBean")返回 FactoryBean实例本身。

所以在你的情况下,使用getBean("&sessionFactory")应该返回你的LocalSessionFactoryBean实例本身。然后,您可以拨打.getConfiguration()以获取Configuration对象。

+1

@skaffman干得好! – 2010-04-29 11:51:04

+0

完美,正是我所需要的 - 谢谢! – 2010-04-29 13:23:58

+3

我们怎么能@Autowire这个? – 2014-11-12 13:21:06

相关问题