gpt4 book ai didi

java - 如何在 web.xml 中注册 Spring @Configuration 注释类而不是 applicationContext.xml 文件?

转载 作者:IT老高 更新时间:2023-10-28 13:01:39 26 4
gpt4 key购买 nike

我在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com