【发布时间】:2026-01-21 10:30:01
【问题描述】:
就简单性和正确性而言,注入不同作用域的同一类对象的最佳方法是什么?
在 servlet 中,我希望注入具有不同范围的同一类的对象。 还不知道要不要用jsf。
- 简单性:为每个作用域制作一个
Qualifier和一个生产者方法太多了;在beans.xml中做一个接口,两个类,添加替代也太多了;使用Address#isCurrent()方法没有意义。 - 正确性:JSR299, 3.11 说:不建议使用 @Named 作为注入点限定符。 仍然不知道为什么。
尽管在注入点使用@Named与@ApplicationScoped和@RequestScoped但不是@SessionScoped。请参阅下面的命名 sn-p。
在春天很容易:
Spring sn-p
<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>
命名为 sn-p
/* 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;
【问题讨论】:
标签: java java-ee-6 cdi jboss-weld jsr299