Что касается простоты и правильности, то каков наилучший способ для ввода объектов одного и того же класса с различными областями?Как вводить объекты одного класса с разными областями?
В сервлете я хочу, чтобы объекты с одним и тем же классом обладали разными областями. По-прежнему не знаю, собираетесь ли использовать jsf.
- Простота: изготовление
Qualifier
и метод изготовления для каждой области слишком много; создание интерфейса, два класса и добавление и альтернатива вbeans.xml
тоже слишком много; имеющий методAddress#isCurrent()
, не имеет смысла. - Правильность: JSR299, 3.11 говорит: Использование @Named в качестве квалификатора точки впрыска не рекомендуется. Все еще не знаю почему.
Хотя использование@Named
в точке впрыска работает с@ApplicationScoped
и@RequestScoped
, но не с@SessionScoped
. См. под названием snippet ниже.
Весной это очень легко:
Spring фрагмент
<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 («строка»). После прочтения статьи, которую вы предложили, я пришел с новой идеей, которая мне больше нравится: имеет только один квалификатор для обоих методов. Я попробую это позже. – user454322
Я отредактировал этот пост, который я отметил аннотацией @Qualifier как предпочтительный способ справиться с этим. – nsfyn55
Спасибо, я просто добавил свой ответ с фрагментом – user454322