【问题标题】:Error creating bean with name 'viewResolver' defined in com.luv2code.springsecurity.demo.config.DemoAppConfig创建 com.luv2code.springsecurity.demo.config.DemoAppConfig 中定义的名称为“viewResolver”的 bean 时出错
【发布时间】:2020-08-18 08:27:29
【问题描述】:

我遇到了上下文初始化问题。我不使用 xml 配置文件。我想在没有 xml 的情况下进行 spring 配置,但出现错误。请帮忙解决。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'viewResolver' defined in com.luv2code.springsecurity.demo.config.DemoAppConfig: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.ViewResolver]: Factory method 'viewResolver' threw exception; nested exception is java.lang.StackOverflowError
    org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:625)
    org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:456)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1287)

我的 DemoAppConfig

package com.luv2code.springsecurity.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.luv2code.springsecurity.demo")
public class DemoAppConfig {
    
    @Bean
    public ViewResolver viewResolver() {
        
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        
        viewResolver.setPrefix("/WEB-INF/view/");
        viewResolver.setSuffix(".jsp");
        
        return viewResolver();
    }
    
}

我的网络初始化

public class MySpringMvcDisptacherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        // TODO Auto-generated method stub
        return new Class[] {DemoAppConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        // TODO Auto-generated method stub
        return new String[] { "/" };
    }

}

我知道我的问题出在 DemoAppConfig 中,但我根本找不到它。它必须与解析器一起使用。 但我没有得到我想要的结果。

【问题讨论】:

  • 您正在返回viewResolver(),它再次调用自己。你想返回viewResolver

标签: java spring maven spring-mvc javabeans


【解决方案1】:

viewResolver() 方法调用自身。这永远不会结束,直到堆栈(用于跟踪方法调用)耗尽容量 - “堆栈溢出”。

请参阅 the answer to "What is a StackOverflowError?" 以获得出色的深入解释。

我认为您不想再次调用viewResolver(),而是希望返回局部变量viewResolver(注意,这里没有括号)。

【讨论】:

    【解决方案2】:

    尝试返回 返回视图解析器; 代替 返回 viewResolver();

    @Configuration
    @EnableWebMvc
    @ComponentScan(basePackages="com.luv2code.springsecurity.demo")
    public class DemoAppConfig {
    
        // define a bean for ViewResolver
    
        @Bean
        public ViewResolver viewResolver() {
            
            InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
            
            viewResolver.setPrefix("/WEB-INF/view/");
            viewResolver.setSuffix(".jsp");
            
            return viewResolver;
        }
        
    }
    

    【讨论】:

      猜你喜欢
      • 2020-09-15
      • 1970-01-01
      • 2015-09-24
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-28
      相关资源
      最近更新 更多