単純さと正確さの観点から、同じクラスのオブジェクトを異なるスコープで注入するための最良の方法は何ですか?
サーブレットで、スコープが異なる同じクラスのオブジェクトを挿入したいと思います。jsfを使用するかどうかはまだわかりません。
- シンプルさ:
Qualifier
スコープごとにとプロデューサーメソッドを作成するのは多すぎます。インターフェイスの作成、2つのクラス、および追加と代替beans.xml
も多すぎます。メソッドを持つことAddress#isCurrent()
は意味がありません。 - 正しさ:JSR299、3.11によると:注入ポイント修飾子として@Namedを使用することはお勧めしません。 まだ理由はわかりません。インジェクションポイントで
使用すると 、では機能しますが、では機能しません。以下の名前付きスニペットを参照してください。@Named
@ApplicationScoped
@RequestScoped
@SessionScoped
春にはとても簡単です:
春のスニペット
<bean id="currentAddress" class="xxx.Address" scope="session" />
<bean id="newAddress" class="xxx.Address" scope="request" />
<bean id="servlet" class="xxx.MyServlet">
<property name="currentAddress" ref="currentAddress" />
<property name="newAddress" ref="newAddress" />
</bean>
名前付きスニペット
/* Address class */
@Produces @RequestScoped @Named(value="request")
public Address getNewAddress(){
return new Address();
}
@Produces @SessionScoped @Named(value="application")
public Address getCurrentAddress(){
return new Address();
}
/* Servlet */
@Inject @RequestScoped @Named("request") private Address newAddress;
@Inject @ApplicationScoped @Named("application") private Address currentAddress;