2011-11-25 217 views
2

我正在创建一个具有两个请求范围的bean的类。豆子类注解为:Spring请求范围的bean - 所有字段为空/空

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

以及它们在我的类字段声明:

@Resource 
private RequestScopedBean1 requestScopedBean1 

@Resource 
private RequestScopedBean2 requestScopedBean2 

该系统已用于全国各地的代码库,我没有问题工作。但是,在我的类中,其中一个注入的bean(不是两个,只有一个!)的所有字段都是null/empty。

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

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

请让我知道,如果您需要更多的信息来帮助我在这里!

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

有4个相关项目,让我们称他们为“核心”,“网页”,“普通”和“具体的”。每个应用程序都有自己对应的application-context.xml应用程序从“特定”项目构建的.war文件进行部署。在“特定”web.xml的标签中,导入了“web”和“特定”的应用程序上下文。 'specific'application-context.xml的第一行导入'common'的应用程序上下文,这是我的新类所在的地方。 'web'application-context.xml的第一行导入'核心'应用程序上下文。工作请求范围的bean驻留在'core'中;在'网络'中的破碎的一个。我希望这一点很明确 - 如果不是,请告诉我!其他信息会有用吗?

+1

你可以发布你的web.xml和spring context xml以及不同的bean的包名称。我想知道的是,如果您设置了不同的应用程序上下文,并且您的非工作bean是在不支持Web的上下文中创建的(在这种情况下请求范围将不起作用)。 – pap

+0

我不认为它是相关的,但你不做重定向或类似的东西,而不是一个前锋? –

+0

我无法发布他们,但我会尽我所能来形容他们: –

回答

0

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