2013-12-21 3 views
0

Я использую приведенную ниже конфигурационную настройку. Класс @configuration загружает файл свойств, а затем создается созданный arraylist, который извлекает соответствующие фрагменты файла свойств так, что классы, которые зависят от barUserList и fooUserList, могут легко потреблять. Они даже не знают, что это произошло из файла собственности. Huzzah для DI!Как установить @Qualifier без XML в Spring 3+

Моя проблема возникает, когда я пытаюсь рассказать весне, какой из них я хочу. Класс Foo хочет fooUserList, поэтому я должен иметь возможность использовать аннотацию @Qualifier, но я не могу найти способ/set/квалификатор вне XML.

Итак, мой вопрос в том, как установить квалификатор для этих двух весенних бобы в Джаваланде? Конфигурация Zero XML - большая цель для меня. Я знаю, что вы можете установить @name, а механизм @qualifier для Spring по умолчанию будет @name, но я бы хотел избежать этого. Мне не нравятся вещи, которые «дефолт» для других вещей.

Я использую Весна 3.2.5.RELEASE

@Configuration 
public class AppConfig { 

    @Bean 
    Properties loadProperties() throws IOException { 
     Properties properties = new Properties(); 
     properties.load(new FileInputStream("checker.properties")); 
     return properties; 
    } 

    @Bean 
    @Autowired 
    ArrayList<String> barUserList(Properties properties) { 
     ArrayList<String> barUsernames = new ArrayList<String>(); 
Collections.addAll(barUsernames, properties.getProperty("site.bar.watchedUsernames", "").split(",")); 
     return barUsernames; 
    } 

    @Bean 
    @Autowired 
    ArrayList<String> fooUserList(Properties properties) { 
     ArrayList<String> fooUsernames = new ArrayList<String>(); 
     Collections.addAll(fooUsernames, properties.getProperty("site.foo.watchedUsernames", "").split(",")); 
     return fooUsernames; 
    } 
} 

ответ

2

Одним из способов может быть, определив имя @Bean и использовать его на @Qualifier следующим образом:

@Bean(name="barUserList") 
@Autowired 
ArrayList<String> barUserList(Properties properties) { 
    ArrayList<String> barUsernames = new ArrayList<String>(); 
    Collections.addAll(barUsernames, properties.getProperty("site.bar.watchedUsernames", "").split(",")); 
    return barUsernames; 
} 

и внутри вы можете иметь что-то вроде:

// ... 
@Autowired 
@Qualifier("barUserList") 
private List<String> userList; 
// ... 
+0

Для чего все имя используется? Я собираюсь «топать» на что-нибудь еще? Или это имя действительно не используется для моих целей? Я не планирую делать Autowiring на основе имени. – Jazzepi

+0

имя в этом случае используется для определения того, какой экземпляр «List» используется. В вашем случае вы можете указать имя из '@ Bean', поскольку имя метода используется, когда имя не указано. Я не люблю использовать строки, так как они становятся довольно сложными в рефакторингах, что я обычно делаю, это определить аннотацию классификатора и использовать его для привязки создания '@ Bean' к использованию' @ Autowired', вы можете подробнее [здесь] (http://docs.spring.io/spring/docs/3.0.x/reference/beans.html#beans-autowired-annotation-qualifiers), в этом примере определите аннотацию с именем '@ Offline' , –

+0

Хорошо, я проверю это! Благодарю. – Jazzepi

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

  • Нет связанных вопросов^_^