1

私のSpringアプリケーションでは、以下がシナリオです:

私は Controller を持っていますABscope で定義された別の 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
}
  1. アプリケーションを実行すると、新しい Bean を作成できないという例外が発生します。
  2. スコープを に変更するとprototype。また、リクエストごとに B の hashCode を出力すると、同じ出力が得られます。つまり、リクエストごとに新しいオブジェクトが挿入されていないことを意味します。
  3. ob上記が解決された場合でも、参照が新しいプロトタイプ オブジェクトまたは要求オブジェクトを指し、処理される他の要求が新しいオブジェクトを参照するため、スレッドセーフではありませんB。メインのSpring MVCアプリケーションコンテキストへの参照を取得してから、メソッド内でgetBeanを取得するのが最善です。このようにして、ローカルにアクセスして新しいインスタンスを取得できます。しかし、スレッドセーフの問題を解決するにはどうすればよいですか。
4

1 に答える 1

1

@Controller はシングルトンのスコープにあります。プロキシされた Bean を使用します。

@Service("name")
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
class B{
}
于 2013-02-03T11:25:27.140 に答える