java - Spring-MVC web.xml 文件不使用 ContextLoaderListener
问题描述
我了解 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>
调度程序-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 上下文中)。
推荐阅读
- javascript - Javascript函数是按值传递的?
- node.js - Node.js ImageMagick 在一台计算机上工作,但在另一台计算机上工作
- r - 创建新类别然后计入 R
- node.js - Nodejs 中的 AES-256-GCM
- python - python更新没有readlines命令的行
- javascript - 如何使用没有 id 的 Mongoose 钩子查找子文档?
- python - 无法弄清楚如何解决这个问题。Python Selenium Chromedriver 错误
- delphi - 最小化应用程序(不使用托盘图标)
- php - 仅显示随时间变化的行
- c++ - C++ 中的指针,原始内存操作