Spring BeanがDependency Injectionを使用して作成された後にBeanで何らかのメソッドを実行した後、Bean中に設定されたインスタンス変数メソッド呼び出しはすべてデフォルトのJava値に戻ります。私たちがSpring 2.5.5からSpring 3.0.5に移行した後、これが起こったことがわかりました。Spring 3.0.5プロトタイプBeanインスタンス変数がメソッド呼び出しの後にnullになる
ので、分かりやすくするために、ここでプロトタイプ豆例
です:
@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 ....
}
そして春から豆をつかみ、それを使用するコード:
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ではなく、これは、レガシーコードで更新春3.0.5
で期待どおりに、このすべての作品は、私はあなたがインターフェイスにコーディングすることになっていることを知っているということですので、Bean1はすべきインターフェイスであり、インターフェイスを実装するクラスは実際の作業を行う必要があります。私はこのモデルにもコードを変更し、それでも動作しません。