问题描述
我的项目是S2SH整合的,有两配置文件hibernate.reveng.xml和applicationContext.xml(Spring管理的配置,数据库在这个文件里部署的),但是我需要写一个工具类,需要获取到SessionFactory和Session;问题来了,在工具类中不能简单的获取到spring实例化的SessionFactory,不在其管理的范围内,于是我通过获取<bean>的方式WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); wac.getBean("sessionFactory"); 这样出来还是空指针;于是我又Configuration config=new Configuration().configure();SessionFactory factory=config.buildSessionFactory();这样因为不是hibernate.cfg.xml配置的方式,所以还是不成功获取到。请问各位高手是不是我的做法或写法有错,还有其他方式可以获取到session吗?!!!!!!!!!!!!!!! 问题补充:7454103 写道
解决方案
引用这样配置后,如何在工具类里获取呢 你这个 hibernateTemplate 注入到你 的 baseDao 里面 就可以获取 session 或者其他! hibernateTemplate 已经帮你封装好了! 直接可以调用它的方法!!你 点 一下!###你是不是没有启动Web容器就直接在测试程序中使用WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();wac.getBean("sessionFactory"); 这种方式与Servletcontext绑定,必须在Web容器或者特殊的测试环境才能使用。如果你没启动Web容器还是使用ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml"); 等方式打开Spring容器吧###我想我明白你错在哪里了。其实sessionfactory与$sessionFacotory并无关系,只是一个是实例一个是代理类而已,无所谓。你的错误是发生在spring容器在取相应的bean时无法判断当前所处的线程。你不要使用这个方法,改用WebApplicationContext类来获取spring bean时就明白了,其中有个很重要的参数ServletContext,你可能没有注入进去。###当然 你需要自己写工具类的话最好不直接这么干!推荐 : <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean>或者 hibernateDaosupport 这类的!###spring不推荐直接获取sessionFactory,因为其sessionfactory是个动态代理类。你最好直接在一个类中直接注入相关的session.如果非要获取sessionfacotry,可以使用$sessionfactory获得目标类。应该是这样,在官方文档中应该有介绍。###ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");SessionFactory sessionFactory=(SssionFactory)app.getBean("sessionFactory");###WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();wac.getBean("$sessionFactory"); 在spring指南中有过提示的吧?###sessionFactory 让spring管理起来了嘛?贴下相关配置!