java - 使い方 - spring boot sessionattributes



セッション中のSpringストアオブジェクト (2)

コントローラにショッピングカートを直接注入している場合、コントローラはシングルトンスコープ(デフォルト)であるため、注入しているBeanよりも広いスコープであるため、問題が発生する可能性があります。 この優秀な記事は、あなたがしようとしていることを正確にするための4つのアプローチの概要を示しています: http://richardchesterwood.blogspot.co.uk/2011/03/using-sessions-in-spring-mvc-including.html : http://richardchesterwood.blogspot.co.uk/2011/03/using-sessions-in-spring-mvc-including.html

ソリューションの簡単な概要は次のとおりです。

  1. コントローラーをセッションスコープ(コントローラレベルで@scope("session")を使用@scope("session")に設定し、コントローラー内にショッピングカートのインスタンスを作成するだけです。
  2. コントローラーを要求し、セッションスコープのショッピングカートを挿入します。
  3. ちょうど直接セッションを使用してください - 一種の乱雑な、IMO。
  4. Springのアノテーション<aop:scoped-proxy/>ます。

すべての方法に長所と短所があります。 私は通常、オプション2または4を使用します。オプション4は、実際にはかなりシンプルで、私が春に文書化した唯一のアプローチです。

https://src-bin.com

私はSpringでショッピングカートを実装したいので、オブジェクトCart (商品、paymentType、deliveryTypeなどの属性を持つ)をセッションに保存する必要があります。 Beanと属性 "scope"を "session"に設定して作成しようとしましたが、コントローラーやCartクラスでいくつかの追加注釈を使用すると機能しません。 どのような使用例が本当に役に立つでしょう:-)事前に感謝します。


Answer #1

以下のようにScopeアノテーションをセッションとプロキシモードで追加するだけです

@Component
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class ShoppingCart implements Serializable{
}

これまでショッピングカートオブジェクトを使用する必要がある場所では、オートワイヤーをかけることができます

@Service
public class ShoppingCartServiceImpl implements ShoppingCartService {
    Logger logger = LoggerFactory.getLogger(ShoppingCartServiceImpl.class);


    @Autowired
    ShoppingCart shoppingCart;
}

開示:私はSpringプロジェクトスコープを示すSpring MVC、angularJS、およびブートストラップを使用するサンプルプロジェクトを開発しました。
https://github.com/dpaani/springmvc-shoppingcart-sample





spring-mvc