我了解ContextLoaderListener和DispatcherServlet的目的是什么。

我不明白的是,如果我未在web.xml文件中指定ContextLoaderListener类,为什么我的Sprin-MVC应用程序将启动。

我希望看到一个错误,指出缺少上下文或类似内容。

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>


Web.xml

<display-name>Camel Routes</display-name>

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
</context-param>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>




dispatcher-servlet.xml

<aop:aspectj-autoproxy/>

<context:component-scan base-package="com.crmProject"/>

<mvc:annotation-driven/>

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
</bean>

<bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
      destroy-method="close">
    <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
    <property name="jdbcUrl" value="jdbc:mysql://mysql:3306/web_customer_tracker"/>
    <property name="user" value="root"/>
    <property name="password" value="root"/>

    <property name="initialPoolSize" value="5"/>
    <property name="minPoolSize" value="5"/>
    <property name="maxPoolSize" value="20"/>
    <property name="maxIdleTime" value="30000"/>
</bean>

<bean id="sessionFactory"
      class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name="dataSource" ref="myDataSource"/>

    <property name="packagesToScan" value="com.crmProject.entity"/>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
        </props>
    </property>
</bean>

<bean id="myTransactionManager"
      class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<tx:annotation-driven transaction-manager="myTransactionManager"/>

<mvc:resources location="/resources/" mapping="/resources/**"/>

最佳答案

由于您的上下文定义似乎非常传统且完整,因此您不需要ContextLoaderListener。 Spring可以开箱即用地处理所有配置。

如果您有一些奇怪的初始化需求,而Spring无法处理,则ContextLoaderListener会起作用。实现自己的ContextLoaderListener子孙并进行配置(在xml文件中或通过注释)。您的实现可以自由地做任何需要做的事情(例如,从非标准来源获取配置以便将其注入Spring上下文)。

07-26 06:30