Я пытаюсь реализовать мелкозернистую конфигурацию @Autowired
, используя в основном пример из весенней документации по адресу: http://docs.spring.io/spring/docs/3.2.0.RELEASE/spring-framework-reference/html/beans.html#beans-autowired-annotation-qualifiers.Тонколистная пружинная автопоставка не работает (@Подробнее с дополнительной пользовательской аннотацией)
Учитывая следующие TestCase:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=ExampleConfiguration.class)
public class ExampleTest {
@Autowired @ExampleQualifier(key="x")
private ExampleBean beanWithQualifierKeyX;
@Test
public void test() {
System.out.println(this.beanWithQualifierKeyX);
}
}
и следующая конфигурация:
@Configuration
public class ExampleConfiguration {
@Bean
@ExampleQualifier(key = "x")
public ExampleBean exampleBean1() {
return new ExampleBean();
}
@Bean
@ExampleQualifier(key = "y")
public ExampleBean exampleBean2() {
return new ExampleBean();
}
@Bean
public ExampleBean exampleBean3() {
return new ExampleBean();
}
}
с настраиваемой квалификационном annoation:
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface ExampleQualifier {
String key();
}
То, что я бы ожидать, является следующее: свойство beanWithQualifierKeyX
должно быть выполнено с использованием первого компонента из конфигурации cla песчаники Как аннотация по конфигурации, так и аннотация в свойстве имеют настройку key="x"
, поэтому это должно быть единственное совпадение. Насколько я вижу, это почти то же самое, что и примечание MovieQualifier
из документации примера Spring.
Однако, когда я выполнить тест, я получаю следующее сообщение об ошибке:
org.springframework.beans.factory.BeanCreationException:
Could not autowire field: private xxx.ExampleBean xxx.ExampleTest.beanWithQualifierKeyX;
nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException:
No unique bean of type [xxx.ExampleBean] is defined:
expected single matching bean but found 2: [exampleBean1, exampleBean2]
Похоже, весна действительно выполняет матч с аннотацией (так как exampleBean1
и exampleBean2
аннотируются), но не учитывает учтите значение для key
аннотации - в противном случае x
будет идеальным сочетанием.
Я пропустил что-то в процессе настройки или почему нет совпадения?
версия Spring я использую 3.2.0.RELEASE
В пользовательском классификаторе я скучаю '@ Target' аннотация, и я не уверена, но вместо' 'key' попробовать value'. –
Я пробовал оба подхода - добавление '@ Target' (поле и метод), а также использование' value' вместо 'key' - тот же результат, ошибка по-прежнему сохраняется. – perdian
Вы пытались впрыснуть его в что-то еще в качестве тестового теста? Мне интересно, если это общая проблема или только тестовая вещь. –