質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

1回答

1603閲覧

spring mvcでセッション情報をフィールドインジェクションで自動セットする方法

tt2

総合スコア14

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2018/11/05 10:21

編集2022/01/12 10:55

spring mvcでセッション情報をフィールドインジェクションで自動的にセットする方法を教えて頂けないでしょうか。
例えば、userBeanという名称でセッションに保存した情報をServiceクラスのフィールドに自動セットを行う方法を探しています。
以下のコードで試しましたが、TestServiceクラスのuserBeanがnullになっており、参照できませんでした。

xml

1<dependency> 2 <groupId>cglib</groupId> 3 <artifactId>cglib</artifactId> 4 <version>3.2.9</version> 5</dependency>

Java

1import org.springframework.context.annotation.ScopedProxyMode; 2import org.springframework.stereotype.Component; 3import org.springframework.web.context.annotation.SessionScope; 4 5@Component 6@SessionScope(proxyMode = ScopedProxyMode.TARGET_CLASS) 7public class UserBean { 8 private String name; 9 private int age; 10 11 public String getName() { 12 return name; 13 } 14 public void setName(String name) { 15 this.name = name; 16 } 17 public int getAge() { 18 return age; 19 } 20 public void setAge(int age) { 21 this.age = age; 22 } 23}

Java

1import javax.servlet.http.HttpServletRequest; 2import javax.servlet.http.HttpSession; 3 4import org.springframework.beans.factory.annotation.Autowired; 5import org.springframework.stereotype.Controller; 6import org.springframework.web.bind.annotation.RequestMapping; 7 8@Controller 9public class WelcomeController { 10 @Autowired 11 HttpServletRequest request; 12 13 @RequestMapping("/") 14 public String home() { 15 UserBean userBean = new UserBean(); 16 userBean.setName("テストユーザ"); 17 userBean.setAge(50); 18 19 HttpSession session = request.getSession(true); 20 session.setAttribute("userBean", userBean); 21 22 new TestService().method(); 23 24 return "menu"; 25 } 26}

Java

1import org.springframework.beans.factory.annotation.Autowired; 2import org.springframework.stereotype.Service; 3 4@Service 5public class TestService { 6 @Autowired 7 private UserBean userBean; 8 9 public void method() { 10 System.out.println("TestService : " + userBean.getName()); 11 } 12 13 public void setUserBean(UserBean userBean) { 14 this.userBean = userBean; 15 } 16 17 public UserBean getUserBean() { 18 return this.userBean; 19 } 20}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

UserBeanクラスのScope属性を定義しましょう。その際、ScopedProxyModeをtargetClassに指定します。

例:

java

1import org.springframework.context.annotation.ScopedProxyMode; 2import org.springframework.stereotype.Component; 3import org.springframework.web.context.annotation.SessionScope; 4 5@Component 6@SessionScope(proxyMode=ScopedProxyMode.TARGET_CLASS) 7public class UserInfo { 8 // ....... 9}

これにより、SpringMVCのステレオタイプのアノテーションがついたクラス(Spring管理下にあるので)から参照できます。Serviceクラスであれば、@Serviceをつけましょう。

java

1pmport org.springframework.beans.factory.annotation.Autowired; 2import org.springframework.stereotype.Service; 3 4import com.github.apz.springsample.model.UserInfo; 5 6import lombok.Getter; 7import lombok.Setter; 8 9@Service 10public class SampleService { 11 @Autowired 12 @Getter @Setter 13 private UserInfo userInfo; 14 15}

投稿2018/11/06 00:16

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

A-pZ

2018/11/06 00:17

必須ライブラリとして、CGLIBないしはasmが必要です。
tt2

2018/11/06 14:02 編集

ご回答ありがとうございます。教えて頂いた情報をもとに、cglibをpom.xmlに追加し、UserBeanクラスとServiceクラスを上記の通り修正したのですが、状況変わらずでした。
A-pZ

2018/11/06 14:25

new TestService().method();としては、TestServiceがSpringの管理下になっていないので、そもそも取得できません。Controllerで、Serviceクラスを@Autowiredして取得したものを利用しないと、セッション属性にバインドしてもSpringのコンテナがセッション属性から取得できていないので、意味がありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問