#わからないところ
例えば、以下のようにsingletonスコープのインスタンスが、sessionスコープオブジェクトを持っている場合は、sessionスコープを設定したBeanがsingletonスコープに変化してしまうことがあるのはわかります。
java
1@Data 2@Component 3@SessionScope 4public class SampleDTO { 5 private boolean isLogin; 6}
java
1@Service 2 @RequiredArgsConstructor 3 public class SampleService { 4 5 private final SampleDTO SampleDTO; 6 7}
では、スコープ問題のあるSampleDTOをどこに保持させれば良いのか....
自分で考えたのは以下のような実装法です。
・SampleDTOをcontrollerに保持しておいてservice実行時に必要であればメソッドの引数として渡す。
正直これ以外思いつくのは、状態を持たせないような設計にする
ことだと思いますが、どうしてもSingleton以外のライフサイクルでBeanを管理したいです。
なので以下のようにしました。
java
1@Controller 2@RequiredArgsConstructor 3@RequestMapping 4public class SampleController { 5 6 private final SampleService SampleService; 7 private final SampleDTO SampleDTO; 8 9... 10}
これだと、スコープの違いによってバグが発生してしまうなどの現象は起こらないのでしょうか?
今は
・SampleDTOはSessionScope
・SampleServiceはSingletonScope
・SampleControllerはSingletonScope
となっているのでしょうか?
(どうやって検証してあげるのかもわかっておりません。。)
もしSampleControllerがSingletonScope
だと2人以上アクセスした時挙動がおかしくなるのでは?と思っております。
今のところおかしい挙動はしていないのでなぜcontrollerにSessionScopeを持つSampleDTOを保持させていても問題が起きていないのか・・・
スコープの問題について動きが良くわかってない状態です。。。
あなたの回答
tips
プレビュー