【问题标题】:Spring request-scoped bean - all fields null/emptySpring请求范围的bean - 所有字段为空/空
【发布时间】:2011-11-25 11:37:21
【问题描述】:

我正在创建一个包含两个请求范围 bean 的类。 bean 类使用以下注释:

@Component
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class RequestScopedBean1 {
  // stuff
}

他们在我的班级中作为字段的声明是:

@Resource
private RequestScopedBean1 requestScopedBean1

@Resource
private RequestScopedBean2 requestScopedBean2

这个系统已经在我正在处理的所有代码库中使用,没有任何问题。但是,在我的课堂上,其中一个注入的 bean(不是两个,只有一个!)的所有字段都为空/空。

我知道,简单地在调试模式下查看请求范围 bean 的字段通常会显示它们都是空的,因为 Spring 是如何使用代理管理此类 bean 的。我也知道,出于同样的原因,应该使用 getter 和 setter 访问字段,而不是直接访问。但是,在 intelliJ 中使用 Evaluate Expression 函数时,此 bean 仍然显示为 null/空。

我的班级和每个 bean 班级都在不同的项目中。工作 bean 在核心项目中。损坏的bean在一个依赖核心项目的项目中,而我的类在一个依赖于损坏bean的项目的项目中。

如果您需要更多信息来帮助我,请告诉我!

编辑我的 XML 配置文件的简要说明:

有 4 个相关项目,我们称它们为“核心”、“网络”、“通用”和“特定”。每个都有自己对应的 application-context.xml 该应用程序是从“特定”项目构建的 .war 文件部署的。在“特定”web.xml 的标签中,“网络”和“特定”的应用程序上下文被导入。 “特定”application-context.xml 的第一行导入“common”的应用程序上下文,这是我的新类所在的位置。 'web' application-context.xml 的第一行导入'core' application-context。工作请求范围的 bean 驻留在“核心”中; “网络”中的破碎者。我希望这很清楚 - 如果没有,请告诉我!还有其他信息有用吗?

【问题讨论】:

  • 您能否发布您的 web.xml 和 spring 上下文 xml(s) 以及不同 bean 的包名称。我想知道的是,如果您正在设置不同的应用程序上下文,并且您的非工作 bean 是在不支持 Web 的上下文中创建的(在这种情况下,请求范围将不起作用)。
  • 我不认为这是相关的,但你不做重定向或类似的事情而不是转发吗?
  • 我不能发布它们,但我会尽力描述它们:

标签: java spring dependency-injection


【解决方案1】:

可能是您尝试在类中访问的setter 和getter 的访问说明符未指定(即默认)。尝试将其更改为公开并查看。

【讨论】:

    猜你喜欢
    • 2013-01-21
    • 2011-08-15
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多