正确的弹簧配置添加项目

时间:2012-06-08 11:51:57

标签: java spring hibernate

我有一个正在运行的spring-hibernate项目,我决定将这个项目的一部分移到一个新项目中,以获得类似基础项目的东西。 这个新的基础项目包含一些用于hibernate的dao类和许多spring注释。所以我成功创建了它并将其发布到我的存储库。之后,我将其添加为依赖于我的第一个项目。我还添加了spring配置包的基础项目。 现在我有没有spring / hibernate配置的基础项目。另一个项目依赖于base one,而另一个项目有spring / hibernate config。

现在我收到了很多运行时错误。 1.基础项目中的服务类不能从基础项目中的另一个包中自动装配DAO类。我把它放在一个包装后问题解决了。但我不喜欢它。 2.我的DAO方法落在运行时“没有Hibernate会话绑定到线程,配置不允许在这里创建非事务性的”。但之前,当我有一个项目时,他们工作得很好。

基础项目中是否需要弹簧配置?我该怎么办呢?

更新

现在Spring事务管理器出现问题。 在基础项目中,我有dao类的基本抽象控制器。在主类我有控制器继承基本控制器。当我在服务器上运行项目时,当基本dao调用sessionFactory.getCurrentSession()时,我收到“没有Hibernate Session绑定到线程”。 但在我分裂这个项目之前,一切都很好。如果我从junit运行Dao方法,它们也可以正常工作。

解决售后服务 问题是在“context:component-scan”twise中添加了一些包。它会产生这种效果。 谢谢你的回复。

2 个答案:

答案 0 :(得分:0)

如果在主项目(而不是基础项目)中对dao / services使用@Service或@Component注释,则需要在spring context xml中指定扫描包。这应该有用。

使用hibernate实体映射可以完成同样的事情。在主项目中使用Spring LocalSessionFactoryBean来设置hibernate实体从基础项目中扫描包。这也适用于你,因为它对我有用。

答案 1 :(得分:0)

Spring配置文件可以在类路径中的任何位置(基础项目,主项目......)。您只需将它们添加到Web.xml文件中的上下文中:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath:/applicationContext-context1.xml         
        classpath:/applicationContext-context2.xml
        classpath:/applicationContext-context3.xml
        /WEB-INF/applicationContext-context4.xml 
    </param-value>
</context-param>

我认为你现在在主应用程序(而不是基础库)中拥有所有这些内容会更好。