runnableクラスをautowireし、異なる呼び出しで異なるインスタンスを作成して配列に保持しようとしているときに、この問題に直面しました。本質的にプロトタイプのautowiredフィールドの新しいインスタンスを取得するためのより洗練された方法
XML設定は次のとおりです。
public class ThreadHandler{
@Autowired
private ABC threadName;
//getter
ABC getThreadName(){
return threadName;
}
public void someFunction(){
List<ABC> abc = new ArrayList(ABC>();
for (int i=0;i<SOME_CONST;i++){
ABC tName = getThreadName();
abc.add(tName);
tName.start();
}
}
}
ABC
がThread/Runnable/Callable
あるクラスでみましょう:私のコードで
<bean name="threadName" Class="ABC" scope="prototype" />
、私はこのような何かをしようとしています。
このようにして、java.lang.IllegalThreadStateException
をスローします。 しかし、使用すると正常に動作しますABC tName =appContext.getBean("threadName",ABC.class);
どうしてですか?
getMethodからオブジェクトを取得する際に新しいインスタンスを取得しないでください。
ゲッターは必要ありません。ちょうどこれを使ってください。threadName.someFinction(); –
あなたは、this.threadNameは常に新しいインスタンスを与えることを意味しますか?ちょうどappContext.getBean( "name"、class)のやり方は? – instanceOfObject