【发布时间】:2011-05-01 02:11:48
【问题描述】:
我是 Spring 和 bean 概念的新手,如果问得很清楚,很抱歉。 我已经建立了一个 Java 项目并使用 Hibernate 框架来连接数据库(在 eclipse 上使用 hibernate 工具,真的推荐顺便说一句)。 我的基本设置如下:
- 一些休眠 pojo(由休眠工具生成),
- 休眠映射文件(hbm.xml 文件)。
- 配置是在 hibernate.cfg.xml 文件中设置的,该文件位于我的包根目录下。
- 我最初设置了一个从我的 sessionFactory 获取会话的 HibernateUtils 类。
- 一些充当 Dao 的类 - 使用 pojos 和 hibernateUtils 创建查询以获取会话。
这与 hibernate 强大的框架配合得很好。然后我迁移到项目到 Spring MVC。从我阅读的各种教程中,我了解到需要进行一些更改才能使事情再次正常运行。主要变化是 Spring FW 现在自己加载 bean,因此如下:
- pojo 没有改变,hbm.xml 文件也没有改变
- 不再在 hibernate.cfg.xml 中设置配置 - 一旦我在 XML 文件中声明它,Spring MVC FW 就会加载它自己的 LocalSessionFactoryBean(Spring 搜索 xmls 作为初始化过程的一部分)。因此,我创建了一个名为 spring-hibernate.xml 的单独 xml 文件,其中包含 DB 定义、会话工厂 bean 和一个休眠模板。为了完成它,xml文件还声明了Dao和hbm文件的位置。
- 在 xml 中配置了 hibernate 模板,存在 bean 注入,因此我更改了 Dao 文件以将 getter/setter 添加到 hibernate 模板属性中。然后使用这个 - Dao 类可以创建数据库查询。
所有这些配置工作正常,我可以让 Spring FW 初始化 Dao 类(我放了一个 sysout 只是为了确认 Dao 类在 MVC 启动期间注入了休眠模板)。现在我的问题是 - 如何访问创建的 Dao bean 实例?
在我的逻辑部分,我得到了 bean,如下所示:
ClassPathXmlApplicationContext appContex = new ClassPathXmlApplicationContext(new String[] {"spring-hibernate.xml"});
UserUIDDao userUIDDao= (UserUIDDao)appContext.getBean("UserUIDDao");
问题是 - 这是对新创建的 bean 的新引用,而不是在 spring MVC 启动期间创建的那个。
所以我的问题是:如何获取由 Spring init 进程创建的原始 bean?并且 - 我的设置是否正确?
【问题讨论】:
标签: java hibernate spring-mvc