就簡單性和正確性而言,用不同範圍注入同一類的對象的最佳方法是什麼?如何用不同的作用域注入同一類的對象?
在一個servlet中,我想注入具有不同作用域的相同類的對象。 還不知道是否要使用jsf。
- 簡單性:使每個作用域的
Qualifier
和生產者方法太多;製作一個界面,兩個類的加入和替代在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;
非常感謝您的回答。 我可以看到阻止@Named(「string」)練習的原因。 在閱讀了您建議的文章之後,我帶來了一個我更喜歡的新想法:對這兩種方法只有一個限定符。我會在稍後嘗試。 – user454322
我編輯了那篇文章,我已經注意到@Qualifier註解作爲處理這個問題的首選方法。 – nsfyn55
謝謝,我只是添加了我的答案與片段 – user454322