Spring 3.0.5原型Bean实例变量在方法调用后变为null

时间:2011-11-10 23:01:38

标签: spring dependency-injection

有一个奇怪的Spring问题,在使用依赖注入创建Spring bean之后,然后在bean上运行一些方法,在bean方法调用期间设置的实例变量都返回到它们的默认Java值。在我们从Spring 2.5.5迁移到Spring 3.0.5之后发现了这种情况。

为了清楚起见,这里是示例

原型bean:

@Component("bean1")
@Scope("prototype")
public class Bean1{
    String someString;//There are other instance variables but same happens to them

    @Autowired
    @Qualifier("otherBean")
    private OtherBean otherBean;

    public void doSomething(){
         someString="1234ABC";
    }
    //setters and getters ....
}

从春天抓住bean并使用它的代码:

Bean1 bean1 = (Bean1) applicationContext.getBean("bean1");
bean1.doSomething();//updates some instance variables in bean1
String value = bean1.getSomeString();  //Instance variables is null
Object otherObject = bean1.getOtherBean(); //This Spring injected bean is correctly initialized

因此,如果我调试代码,实例变量(someString)在doSomething方法调用中设置在bean中,但在我返回之后,该值将返回null。

最糟糕的是,这一切都在2.5.5中按预期工作,但在更新的Spring 3.0.5中没有。

这是遗留代码所以我知道你应该编写接口代码,因此Bean1应该是一个接口,实现接口的类应该做实际的工作。我也将代码更改为此模型,但仍然无效。

2 个答案:

答案 0 :(得分:0)

尝试@Scope(value =“prototype”,proxyMode = ScopedProxyMode.TARGET_CLASS)

答案 1 :(得分:0)

我遇到了同样的问题,但无法得到确切的解决方案。然后我只是将范围更改为请求。