org.springframework.orm.hibernate3.LocalSessionFactoryBeanの疑惑解決策

4061 ワード

プロジェクトではSSHフレームワーク(Struts 2+Spring 3+Hibernate 3)が使用され、アプリケーションContextではセッションファクトリが構成されています
"sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  "dataSource" ref="dataSource">
  "hibernateProperties">
  
  "hibernate.dialect" >org.hibernate.dialect.SQLServerDialect
  "hibernate.jdbc.batch_size">20
  "hibernate.show_sql">true
  
  
  "mappingResources">
  
  com/jw/pojo/JwUser.hbm.xml
  
  
  

junit 4でテストを定義しました
@Test
public void beanSessionFactoryTest(){
  LocalSessionFactoryBean sessionFactory=(LocalSessionFactoryBean)appContext.getBean("sessionFactory");
}

テストを実行中に異常が発生しました
Testcase: beanSessionFactoryTest(com.test.spring.SpringBeanTest): Caused an ERROR
org.hibernate.impl.SessionFactoryImpl cannot be cast to org.springframework.orm.hibernate3.LocalSessionFactoryBean
java.lang.ClassCastException: org.hibernate.impl.SessionFactoryImpl cannot be cast to org.springframework.orm.hibernate3.LocalSessionFactoryBean

問題の分析:
LocalSessionFactoryBeanが実現したorg.springframework.beans.factory.FactoryBeanインタフェース、springは組み立てる時、orgが実現したことを発見したら.springframework.beans.factory.FactoryBeanインタフェースでは、FactoryBean#getObject()メソッドで返されるオブジェクトのアセンブリが使用されます.具体的には、ドキュメントを参照してください.LocalSessionFactoryBeanインスタンスを取得するには、idの前に'&'を追加すればいいです.プロファイルにBeanFactory.getBean('&sessionFactory')が入手したのがLocalSessionFactoryBeanの例である.
解決方法:
ClassPathXmlApplicationContext cpx=new ClassPathXmlApplicationContext("beans.xml");
LocalSessionFactoryBean sessionFactory=(LocalSessionFactoryBean)cpx.getBean("&sessionFactory");
System.out.println("step3 sessionFactory=" + sessionFactory );

 
転載先:https://www.cnblogs.com/wangshuo1/p/5598176.html