如何从Spring获取Hibernate Configuration对象?

时间:2010-04-29 09:21:50

标签: hibernate spring

我试图在我的非Spring代码中获取Spring定义的Hibernate配置和SessionFactory对象。以下是我的applicationContext.xml文件中的定义:

代码:

<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本身,因为我需要访问Configuration以及SessionFactory。

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

1 个答案:

答案 0 :(得分:40)

Spring容器的一个不起眼的功能是the & prefix

  

当你需要问一个容器时   实际的FactoryBean实例   你自己,而不是它生产的豆子   用符号括起bean id   符号&(没有引号)时   调用的getBean方法   ApplicationContext。所以对于给定的   身份为FactoryBean的{​​{1}},   在...上调用myBean   容器返回的产品   getBean("myBean"),并调用   FactoryBean返回   getBean("&myBean")实例本身。

因此,在您的情况下,使用FactoryBean应该返回getBean("&sessionFactory")实例本身。然后,您可以致电LocalSessionFactoryBean以获取.getConfiguration()对象。