私のSpringアプリケーションでは、以下がシナリオです:
私は Controller を持っていますA
。B
scope で定義された別の Bean Request
。
@Service("name")
@Scope("request")
class B{
private String name;
public void init(String name){
this.name = name
}
}
と
@Controller
class A{
@Autowired
@Qualifier("name")
B ob;
//using B
}
- アプリケーションを実行すると、新しい Bean を作成できないという例外が発生します。
- スコープを に変更すると
prototype
。また、リクエストごとに B の hashCode を出力すると、同じ出力が得られます。つまり、リクエストごとに新しいオブジェクトが挿入されていないことを意味します。 ob
上記が解決された場合でも、参照が新しいプロトタイプ オブジェクトまたは要求オブジェクトを指し、処理される他の要求が新しいオブジェクトを参照するため、スレッドセーフではありませんB
。メインのSpring MVCアプリケーションコンテキストへの参照を取得してから、メソッド内でgetBeanを取得するのが最善です。このようにして、ローカルにアクセスして新しいインスタンスを取得できます。しかし、スレッドセーフの問題を解決するにはどうすればよいですか。