java - 创建 WebMVCConfig 资源 [/com.chat.config/] 中定义的名称为 'resolver' 的 bean 时出错

标签 java spring maven spring-mvc javabeans

我在上下文初始化方面遇到问题。我不使用 xml 配置文件。我读了很多关于类似问题的文章,但是..我想在没有xml的情况下进行spring配置,但出现错误。请帮忙解决。

`org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'resolver' defined in com.chat.config.WebMVCConfig: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.view.InternalResourceViewResolver]: Factory method 'resolver' threw exception; nested exception is java.lang.StackOverflowError
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1173)

这是我的 WebMVCConfig

  @Configuration
    @ComponentScan("com.chat")
    @EnableWebMvc
    public class WebMVCConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/scripts/**").addResourceLocations("/scripts/");
        registry.addResourceHandler("/styles/**").addResourceLocations("/styles/");
        registry.addResourceHandler("/images/**").addResourceLocations("/images/");
        registry.addResourceHandler("/fonts/**").addResourceLocations("/fonts/");
        registry.addResourceHandler("/pages/**").addResourceLocations("/views/");

    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();

    }
    @Bean
    public InternalResourceViewResolver resolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();

        resolver().setPrefix("/views/");
        resolver().setSuffix(".jsp");
        resolver.setViewClass(JstlView.class);
        return resolver;
    }
}

WebInit

    public class WebInit extends 
    AbstractAnnotationConfigDispatcherServletInitializer {
    // Этот метод должен содержать конфигурации которые инициализируют Beans
    // для инициализации бинов у нас использовалась аннотация @Bean
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[]{
                WebMVCConfig.class
        };
    }

    // Тут добавляем конфигурацию, в которой инициализируем ViewResolver
    @Override
    protected Class<?>[] getServletConfigClasses() {

        return new Class<?>[]{
                WebMVCConfig.class
        };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/","/login", "/chat","/dialog","/registration" };
    }

}

pom.xml

   <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0   

    <modelVersion>4.0.0</modelVersion>

    <groupId>MyChat</groupId>
    <artifactId>MyChat</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
<dependencies>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.3.8.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>javax.websocket</groupId>
        <artifactId>javax.websocket-api</artifactId>
        <version>1.1</version>
    </dependency>
    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
    </dependency>

</dependencies>

</project>

最佳答案

错误在这里:

@Bean
public InternalResourceViewResolver resolver() {
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();

    resolver().setPrefix("/views/");
    resolver().setSuffix(".jsp");

您的方法名称是 resolver 并且您重复调用 resolver()。这是一个无限递归调用。应该是这样的:

@Bean
public InternalResourceViewResolver resolver() {
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();

    resolver.setPrefix("/views/");
    resolver.setSuffix(".jsp");

关于java - 创建 WebMVCConfig 资源 [/com.chat.config/] 中定义的名称为 'resolver' 的 bean 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45946999/

相关文章:

java - Java 运行时环境检测到 fatal error 。 EXCEPTION_ACCESS_VIOLATION 异常

java - 编程到接口(interface) - 避免以后的转换

java - 类应用监听配置错误

java - Kotlin 泛型 Array<T> 结果为 "Cannot use T as a reified type parameter. Use a class instead"但 List<T> 没有

java - 求1000位数字中连续五位数字最大乘积的代码

java - 如何使用 DiscriminatorValue 保存实体

java - 通过示例检查 Spring 性能和瓶颈的工具

java - 微服务未从 : http://localhost:8888 Springboot 处的服务器获取配置

java - 如何使用 Java 和 Maven 将所有 swagger 文件打包成一个文件

maven - Grails:为什么在编译期间执行 Config.groovy 文件?