[解決済み] スコープ("prototype")ビーンスコープで新しいビーンが作成されない
2022-05-06 18:37:29
質問
アノテーションされたプロトタイプBeanをコントローラで使用したい。しかし、springは代わりにシングルトンBeanを作成しています。以下はそのためのコードです。
@Component
@Scope("prototype")
public class LoginAction {
private int counter;
public LoginAction(){
System.out.println(" counter is:" + counter);
}
public String getStr() {
return " counter is:"+(++counter);
}
}
コントローラのコードです。
@Controller
public class HomeController {
@Autowired
private LoginAction loginAction;
@RequestMapping(value="/view", method=RequestMethod.GET)
public ModelAndView display(HttpServletRequest req){
ModelAndView mav = new ModelAndView("home");
mav.addObject("loginAction", loginAction);
return mav;
}
public void setLoginAction(LoginAction loginAction) {
this.loginAction = loginAction;
}
public LoginAction getLoginAction() {
return loginAction;
}
}
Velocityテンプレートです。
LoginAction counter: ${loginAction.str}
春
config.xml
はコンポーネントスキャンを有効にしています。
<context:annotation-config />
<context:component-scan base-package="com.springheat" />
<mvc:annotation-driven />
毎回カウントがインクリメントされるんだけど。どこが悪いのかわかりません。
更新
として
提案者:@gkamal
を作成しました。
HomeController
webApplicationContext
-を意識させることで、問題を解決しました。
のコードを更新しました。
@Controller
public class HomeController {
@Autowired
private WebApplicationContext context;
@RequestMapping(value="/view", method=RequestMethod.GET)
public ModelAndView display(HttpServletRequest req){
ModelAndView mav = new ModelAndView("home");
mav.addObject("loginAction", getLoginAction());
return mav;
}
public LoginAction getLoginAction() {
return (LoginAction) context.getBean("loginAction");
}
}
解決方法は?
スコーププロトタイプとは、springにインスタンスを要求するたびに(getBeanまたは依存性注入)、新しいインスタンスを作成し、それへの参照を与えることを意味します。
この例では、LoginActionの新しいインスタンスが作成され、HomeControllerに注入されます。もし別のコントローラで LoginAction を実行すると、別のインスタンスが作成されます。
呼び出しごとに異なるインスタンスが必要な場合は、毎回getBeanを呼び出す必要があります - シングルトンBeanに注入してもそれは達成されません。
関連
-
[解決済み] SecurityContextにAuthenticationオブジェクトが見つかりませんでした - Spring 3.2.2
-
[解決済み] 例外を取得しました。springSecurityFilterChain'という名前のビーンが定義されていません。
-
クラスパス上に Spring WebApplicationInitializer のタイプが検出されない Loading configuration file not found or spring main configuration not found.
-
SLF4J:クラスパスに複数のSLF4Jバインディングが含まれる問題 解決済み
-
解決方法 原因:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException.NonTransientConnectionExceptionが原因です。
-
[解決済み] postmanでサポートされていないメディアタイプ
-
[解決済み】Spring @Autowire プロパティとコンストラクタの違いについて
-
[解決済み】Spring MVCのApplicationContextとWebApplicationContextの違いは何ですか?
-
[解決済み] MockitoでSpringの自動配線された@Valueフィールドをモックするにはどうすればよいですか?
-
[解決済み] Springでプログラム的にプロパティファイルにアクセスする?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】クラスパス上にSpring WebApplicationInitializerの型が検出されない
-
[解決済み] Spring boot - マネージドタイプではありません。
-
[解決済み] NamedParameterJDBCTemplate を使用して挿入すると、「無効な列の種類です」という例外が発生する。
-
[解決済み] org.hibernate.AnnotationException: エンティティに識別子が指定されていません - たとえそれが
-
[解決済み] org.hibernate.tool.schema.spi.CommandAcceptanceException: SpringBoot での h2 と JPA による JDBC 文での DDL 実行エラー
-
[解決済み] Spring Test & Security: 認証をモック化する方法とは?
-
[解決済み] サーブレットにおける <mvc:annotation-driven /> と <context:annotation-config /> の違いは何ですか?
-
[解決済み] Spring Resttemplateの例外処理
-
[解決済み] プロパティファイルから値を読み込むには?
-
[解決済み] コンストラクタの引数を必要とする Bean を @Autowire する方法はありますか?