私はSpringでショッピングカートを実装したいので、セッション中に製品(製品、paymentType、およびdeliveryTypeのような属性を持つ)を保存する必要があります。私はBeanで属性を作成しようとしましたが、 "scope"が "session"に設定されていましたが、コントローラやCart
クラスで追加の注釈を使用するとうまくいきません。どのような使用例が本当に役に立つでしょう:-)事前に感謝します。セッション中のSpringストアオブジェクト
答えて
@Component
@Scope("session")
public class Cart { .. }
、その後
@Inject
private Cart cart;
それはWebコンテキスト(ディスパッチャ-servlet.xml)で宣言されている場合、動作するはずです。あなたのコントローラに直接ショッピングカートを注入している場合は、あなたのコントローラーが(デフォルトで)シングルトンスコープですので、問題はおそらく起こっている
@RequestMapping(..)
public String someControllerMethod(HttpSession session) {
session.addAttribute(Constants.CART, new Cart();
...
Cart cart = (Cart) session.getAttribute(Constants.CART);
}
を:代替オプションは、生のセッションを使用し、そこにあなたのカートオブジェクトを置くことですこれは注入しているBeanよりも広い範囲です。この優秀な記事は、あなたがしようとしていることを正確に示す4つのアプローチの概要を示しています:http://richardchesterwood.blogspot.co.uk/2011/03/using-sessions-in-spring-mvc-including.html。
は、ここでのソリューションの簡単な要約です:
- 範囲セッションスコープ(コントローラレベルでの使用
@scope("session")
)にコントローラとちょうどコントローラでのショッピングカートのインスタンスを持っています。 - コントローラが要求し、セッションスコープのショッピングカートを挿入する範囲を指定します。
- ちょうど直接セッションを使用してください - 一種の乱雑なIMO。
- Springの注釈
<aop:scoped-proxy/>
を使用してください。
すべての方法に賛否両論があります。私は通常
@Component
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class ShoppingCart implements Serializable{
}
セッションとプロキシモードであなただけの、次のようにスコープ注釈を追加する必要があり、私は documented by Spring.
正しいURLはhttp:// richardchesterwoodです。 blogspot.co.uk/2011/03/using-sessions-in-spring-mvc-including.html – Gilead
ありがとう@Gilead。私は正しいURLで更新しました。 –
解決策#4では、どのメソッドでもfinalを使用しないでください。そうすることで、アクセサーはシングルトンになります。セッションスコープではなく、AOPはファイナルを傍受できません。 –
を見てきました実際には非常にシンプルであり、唯一のアプローチですオプション2または4オプション4で行きます -
私は春のSessionスコープを示し、スプリングMVC、angularJSとブートストラップを使用するサンプルプロジェクトを、開発している:これまであなたがショッピングカートオブジェクトを使用する必要がある、あなたはそれを
@Service
public class ShoppingCartServiceImpl implements ShoppingCartService {
Logger logger = LoggerFactory.getLogger(ShoppingCartServiceImpl.class);
@Autowired
ShoppingCart shoppingCart;
}
開示をautowireすることができますhttps://github.com/dpaani/springmvc-shoppingcart-sample
- 1. ガベージコレクション可能なJavaストアオブジェクト
- 2. Spring MVCのセッションは
- 3. Spring Bootアプリケーションのセッション
- 4. Springセッション管理
- 5. SpringのWebSecurityが「無視」してセッションを作成中
- 6. Spring + Hibernateセッション管理
- 7. Springセッション1.2.2とcookie.path
- 8. Spring 4 - セッション管理
- 9. JBossのSpringとセッションのタイムアウト
- 10. Spring Securityセッションのプレーン・テキスト・パスワード
- 11. RedisのないSpringセッション
- 12. redis springセッションのCSRFトークン
- 13. セッション対応のSpring Bean
- 14. Spring 2.5のセッション属性
- 15. Springセキュリティでのセッション固定
- 16. SpringセッションとSpringセキュリティ(3.2.X RELEASE)
- 17. SpringセッションJDBC 1.2.0(Spring起動時)1.3.5
- 18. セッション中のArgumentError#new
- 19. AVAudionセッション中断
- 20. Tomcatセッション複製+ Spring Bean
- 21. apache化学セッションspringと
- 22. Spring MVCセッション最大生涯
- 23. RESTTemplateとspring mvc - セッション属性
- 24. Spring HTTP Invokerセッション(状態)ストレージ
- 25. は、セッション中に(レール)
- 26. Springのバリデーションメソッドでのセッションへのアクセス
- 27. SpringセッションでRedautからOauth2セッションをデシリアライズする際の例外
- 28. SpringでのリクエストとセッションBeanのライフサイクル
- 29. RailsとSpring MVC間のセッションの共有
- 30. Springプロジェクトビルド中のAbstractMethodError
はい、「代替オプション」は動作しますが、私はそれを使用したくありません。自分のコントローラーで私有の属性カートを作成すると、「一致するBeanが依存関係に見つかりませんでしたこの依存関係のautowire候補となるBean。依存関係の注釈:{@ org.springframework.beans.factory.annotation.Autowired(required = true)} "。 ? –
tomaszf
いいえ、dispatcher-servlet.xml。または、私が示したように、注釈 – Bozho
Hmmで宣言されていますが、注釈を使用すると、dispatcher-servlet.xmlにBean定義なしで、注釈を使用してBeanを定義すると、コントローラでのみ404が得られます。 – tomaszf