Мы можем установить имена классификаторов для компонента (например, @Qualifier(value="myBeanQualifiedName")
). но я хочу знать, как установить имя классификатора во время выполнения в классе @Configuration
.Как установить имя квалификатора компонента во время выполнения весной
Предположим, что на основе логики приложения я хочу указать имя в качестве классификатора в файле конфигурации.
Редакция:
ConcreteBean класс ребенок MyAbstractBean.
@Configuration
public class MyBeanFactory {
@Bean
public MyAbstractBean getMySpecifiedBean(String condition){
String QUALIFIER_NAME="QulifierName"+condition;
if(//some condition here){
//How to set a qualifier name :QUALIFIER_NAME for this ConcreteBean instance?
MyAbstractBean b1= new ConcreteBean();
b1.setService(new AnotherService1); // and set some field values to this concrete bean
return b1;
}
else {
MyAbstractBean b2= new ConcreteBean();
b2.setService(new AnotherService2);
return b2;
}
}
}
Предположим getMySpecifiedBean() метод вызывается из разных мест, и каждое место нужно разница экземпляров, но тип ConcretBean(). Экземпляры отличаются друг от друга, поскольку метод setService() устанавливает разные значения свойств. Следовательно, b1 и b2 будут делать разницу с экземпляром службы, где они используются.
В моем примере выше, в зависимости от условия, имя QUALIFIER_NAME будет изменено. Затем Можем ли мы присвоить подготовленное QUALIFIER_NAME имя квалификатора для вновь созданного компонента? и как получить такие бобы с именем квалификатора (имя классификатора известно)? Например, в другом месте,
Строка qalifierName = "QulifierName" + подготовленаConditionedString; @Autowired @Qualified (qalifierName)
Строка qalifierName2 = "QulifierName" + preparedConditionedString2;
@Autowired @Qualified (qalifierName2)
Кроме того, вы можете думать, что, если мы упорно код отборочные .. но думаю, что если там 20 или более экземпляров, которые будут созданы? Мы должны повторять коды.
Какие условия мы говорим?Кроме того, почему вы заботитесь о квалификаторе, если вы правильно создали компонент? – geoand
Посмотрите на ServiceLocatorFactoryBean – Hannes
@geoand. Предположим, что на основе условия параметр, заданный для bean-компонента, может быть изменен. Это может быть похоже на заводскую модель. Кроме того, исходя из значений параметров, то, что компонент bean также может быть изменен, чем другие, когда компонент используется. Поэтому получение правильного компонента важно. –