gpt4 book ai didi

java - 如何访问 @Configuration 或 @SpringBootApplication 类中的 ServletContext

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

我正在尝试更新旧的 Spring 应用程序。具体来说,我试图将所有 bean 从旧的 xml 定义的表单中提取出来,并将它们提取为 @SpringBootApplication 格式(同时大大减少了定义的 bean 总数,因为其中许多不需要 bean )。我当前的问题是我无法弄清楚如何使 ServletContext 可用于需要它的 bean。

我当前的代码看起来像这样:

package thing;

import stuff

@SpringBootApplication
public class MyApp {

private BeanThing beanThing = null;

@Autowired
private ServletContext servletContext;

public MyApp() {
// Lots of stuff goes here.
// no reference to servletContext, though
// beanThing gets initialized, and mostly populated.
}

@Bean public BeanThing getBeanThing() { return beanThing; }

@PostConstruct
public void populateContext() {
// all references to servletContext go here, including the
// bit where we call the appropriate setters in beanThing
}
}

我返回的错误:Field servletContext in thing.MyApp required a bean of type 'javax.servlet.ServletContext' that could not be found。

那么……我错过了什么?有什么我应该添加到路径中的吗?我需要实现一些接口(interface)吗?我无法自己提供 bean,因为重点是我正在尝试访问我自己没有的 servlet 上下文信息(getContextPath() 和 getRealPath() 字符串)。

最佳答案

请注意访问 ServletContext 的最佳实践:您不应该在主应用程序类中执行此操作,但 e. G。一个 Controller 。

否则请尝试以下操作:

实现 ServletContextAware 接口(interface),Spring 将为您注入(inject)它。

删除变量的@Autowired

添加setServletContext方法。

@SpringBootApplication
public class MyApp implements ServletContextAware {

private BeanThing beanThing = null;

private ServletContext servletContext;

public MyApp() {
// Lots of stuff goes here.
// no reference to servletContext, though
// beanThing gets initialized, and mostly populated.
}

@Bean public BeanThing getBeanThing() { return beanThing; }

@PostConstruct
public void populateContext() {
// all references to servletContext go here, including the
// bit where we call the appropriate setters in beanThing
}

public void setServletContext(ServletContext servletContext) {
this.context = servletContext;
}


}

关于java - 如何访问 @Configuration 或 @SpringBootApplication 类中的 ServletContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50047521/

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