【问题标题】:Spring import runs hibernate persistence twiceSpring import 运行两次休眠持久化
【发布时间】:2012-11-28 21:06:34
【问题描述】:

我有 2 个弹簧配置:

spring-servlet.xml
spring-security.xml

需要将此行添加到安全性:

<beans:import resource="spring-servlet.xml"/>

现在hibernate运行了两次,这是日志截图:

我的 web.xml:

<servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>


<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
      </listener-class>
</listener>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/spring-security.xml
    </param-value>
</context-param>

【问题讨论】:

    标签: java spring hibernate servlets spring-mvc


    【解决方案1】:

    删除&lt;beans:import resource="spring-servlet.xml"/&gt;

    并设置

    <param-value>
        /WEB-INF/spring-security.xml;/WEB-INF/spring-servlet.xml 
    </param-value>
    

    也许你两次定义了 sessionFactory bean。删除其中一个。

    编辑:

    好的,两个上下文是正常的。一-应用上下文,由ContextLoaderListener加载,应该包含sessionFactory、dao、services等的定义,通常名称为applicationContext.xml

    DispatcherServlet 应该只包含用于 MVC 的 bean。您可以在参数中定义conext名称:

    <init-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>WEB-INF/spring-servlet.xml</param-value>
    </init-param>
    

    【讨论】:

    • 这样做了,还是一样,不,我的配置中只有一个。
    • 那么我必须做些什么呢?调度程序自动加载我的 xml,并且 contextloaderlistener 现在加载这 2 个 xml,删除了 imoprt。
    • 您应该决定 MVC 需要哪些 bean 并将其放在 sprint-servlet.xml 中。其余的 bean(服务、DAO、休眠会话工厂、tx 管理器等)转到 application-context.xml 如果您使用的是 spring-security,请将所有与安全相关的内容放在 spring-security.xml 中。操作方法static.springsource.org/docs/Spring-MVC-step-by-step/part6.html
    猜你喜欢
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    相关资源
    最近更新 更多