gpt4 book ai didi

java - 无法分配 ServletContext spring 3

转载 作者:行者123 更新时间:2023-11-30 08:26:26 25 4
gpt4 key购买 nike

我试图在我的 Util 类中使用 servletcontext.getRealPath 来加载文件资源(不是单元测试的一部分),但它不起作用。

我都尝试使用“implements ServletContextAware”:

@Component
public class Utils implements ServletContextAware{
private ServletContext servletContext;

@Override
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;

System.out.println("**** "+servletContext);
}
}

这会抛出 NPE,因为 servletcontext 不是由 spring 分配的。

还有@Autowired 路由:

@Component
public class Utils{

@Autowired
private ServletContext servletContext;

在启动 tomcat 时抛出 NoSuchBeanDefinitionException:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.servlet.ServletContext] found for dependency: expected at le
ast 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

我正在添加我的初始化代码,以防我做错了什么阻止 Spring 注入(inject)正确的 bean。

public class WebAppInitializer implements WebApplicationInitializer {

private static Logger LOG = LoggerFactory.getLogger(WebAppInitializer.class);

@Override
public void onStartup(ServletContext servletContext) {
WebApplicationContext rootContext = createRootContext(servletContext);

configureSpringMvc(servletContext, rootContext);

FilterRegistration.Dynamic corsFilter = servletContext.addFilter("corsFilter", CORSFilter.class);
corsFilter.addMappingForUrlPatterns(null, false, "/*");

// configureSpringSecurity(servletContext, rootContext);
}

private WebApplicationContext createRootContext(ServletContext servletContext) {
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();

// rootContext.register(CoreConfig.class, SecurityConfig.class);
rootContext.register(CoreConfig.class);
rootContext.refresh();

servletContext.addListener(new ContextLoaderListener(rootContext));
servletContext.setInitParameter("defaultHtmlEscape", "true");

return rootContext;
}

核心配置类:

@Configuration
public class CoreConfig {

@Bean
public CaptionFixture createCaptionFixture() {
return new CaptionFixture();
}

@Bean
public Utils createUtils () {
return new Utils();
}
}

Utils 是具有 servlet 上下文的类。

我查看了建议的答案:herehere它没有用。

最佳答案

问题是您在调用 refresh() 时没有注册 ServletContext,因此在初始化 bean 时没有可用的。

摆脱这个电话

rootContext.refresh();

ContextLoaderListener 将负责调用 refresh()constructor javadoc解释当作为参数传递的 ApplicationContext 未刷新时会发生什么。

关于java - 无法分配 ServletContext spring 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21488252/

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