私のアプリではMyService
にAutowiredされたUser
beanを使用しています。これはユーザーの情報にログインする原則として使用されています(つまり、ユーザーは静的Beanとしてxmlですが、ログインしたユーザーから動的に生成されます)ログインしたユーザーが10人いる場合は、@AutoWired
User
フィールドに10人の候補があります。 (右?)と私はそれらのいずれかを取得することができますので、AutoWiredは、春のコンテナではなく、セッションで表示されます。Spring @Autowired confusion(コンテナまたはセッション)
私がこれに間違っているかどうかを教えてください。可能であれば実際にそれを解決する方法。しかし、私のAutoWiredフィールドがこのよう@Scope ("Session")
でアノテートされた場合にどのような:
@Component("user")
@Scope("session")
public class User
{
String userid;
String name;
//getter setters etc
}
@Component
public class MyService
{
@Autowired
private User user;
}
は、それは私が私のMyService
コンポーネントを呼び出したときに、いくつかの他のユーザーのユーザーBeanを取得することが可能です。たとえUser
が@Scope(session)
であっても、Cos MyService
は@Component
です。
基本的には(もし私が私の前提に間違っていると)私はあなたが@Autowire
フィールドを見ていると、コンテナ全体を見ており、コンテナはセッションごとにサブコンテナに分割されていないと思います。あなたは別の非スコープのコンポーネントに、春はMyService
とUser
の間に位置するプロキシを生成すること@Scope("session")
、その後@Autowire
でUser
に注釈を付ける
私は 'SpringUtils.getContext(req).getBean(" myservice ")'を実行すると、現在のセッションにない他のユーザBeanを取得します。 – sarmahdi
@sarmahdi:そうです。現在のユーザーのセッションは、Springによってメンテナンスされているスレッドローカル変数です。 – skaffman
私は 'SpringUtils.getContext(req).getBean(" myservice ")'を実行すると、現在のセッションにない他のユーザBeanを取得することはできません。 実際に私はこの問題を抱えてページを読み込んだので、他のユーザーの詳細があります。だから私はそれがユーザーがセッションであるにもかかわらず、サービスがそうではなく、非スコープのセッションがデフォルトでシングルトンであっても、それがcosであるかもしれないと考えていた。 – sarmahdi