2014-01-14 5 views
3

Я пытаюсь реализовать мелкозернистую конфигурацию @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

+1

В пользовательском классификаторе я скучаю '@ Target' аннотация, и я не уверена, но вместо' 'key' попробовать value'. –

+0

Я пробовал оба подхода - добавление '@ Target' (поле и метод), а также использование' value' вместо 'key' - тот же результат, ошибка по-прежнему сохраняется. – perdian

+0

Вы пытались впрыснуть его в что-то еще в качестве тестового теста? Мне интересно, если это общая проблема или только тестовая вещь. –

ответ

Смежные вопросы