- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我在 Web 应用程序中同时使用 jsf 和 spring。我在一个配置类中配置了数据源和 session 工厂,该配置类使用 @Configuration、@ComponentScan
等注释。我的项目中没有任何 applicationContext.xml 文件我正在处理 Configuration 类中的每个上下文 xml 条目。测试用例成功运行,但是当我部署我的 Web 应用程序时,它给了我错误
java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?
现在如果我在 web.xml 中给出监听器类,
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
它给了我错误,
/WEB-INF/applicationContext.xml not found
根据 ContextLoaderListener
的文档,确实如果我在 web.xml
中没有明确给出 contextConfigLocation
参数,它会在 web.xml
中搜索名为 applicationContext.xml
的默认 spring 上下文文件。现在,如果我不想使用 spring 上下文文件并使用注释进行所有配置,我该怎么办?我应该如何注册监听器类 ContextLoaderListener
以便在不使用 xml 文件且仅使用注释的情况下,我能够使用 spring 和 jsf 运行我的 Web 应用程序?
最佳答案
在 web.xml
中,您需要使用 AnnotationConfigWebApplicationContext
引导上下文:
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
org.package.YouConfigurationAnnotatedClass
</param-value>
</init-param>
</servlet>
别忘了使用 @EnableWebMvc
来启动 MVC 注释。
进一步阅读:
是的,你当然需要一个听众。虽然上面完全回答了“如何在 web.xml 中注册 Spring @Configuration 注释类而不是 applicationContext.xml 文件”这个问题,但这里有一个 example来自 Spring 官方文档,其中布局了完整的 web.xml
:
<web-app>
<!-- Configure ContextLoaderListener to use AnnotationConfigWebApplicationContext
instead of the default XmlWebApplicationContext -->
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
<!-- Configuration locations must consist of one or more comma- or space-delimited
fully-qualified @Configuration classes. Fully-qualified packages may also be
specified for component-scanning -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.acme.AppConfig</param-value>
</context-param>
<!-- Bootstrap the root application context as usual using ContextLoaderListener -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Declare a Spring MVC DispatcherServlet as usual -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- Configure DispatcherServlet to use AnnotationConfigWebApplicationContext
instead of the default XmlWebApplicationContext -->
<init-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</init-param>
<!-- Again, config locations must consist of one or more comma- or space-delimited
and fully-qualified @Configuration classes -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.acme.web.MvcConfig</param-value>
</init-param>
</servlet>
<!-- map all requests for /app/* to the dispatcher servlet -->
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
</web-app>
关于java - 如何在 web.xml 中注册 Spring @Configuration 注释类而不是 applicationContext.xml 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8075790/
我是一名优秀的程序员,十分优秀!