如何在Spring3+;中设置没有XML的@Qualifier;

如何在Spring3+;中设置没有XML的@Qualifier;,spring,dependency-injection,spring-3,Spring,Dependency Injection,Spring 3,我正在使用下面的配置设置。@configuration类加载属性文件,然后生成一个arraylist,它以依赖于barUserList和fooUserList的类可以轻松使用的方式提取属性文件的相关块。他们甚至不知道它来自一个属性文件。哈扎迪 当我试图告诉Spring我想要哪一个时,我的问题就来了。Foo类需要fooUserList,所以我应该能够使用@Qualifier注释,但是我找不到在XML之外使用/set/Qualifier的方法 所以我的问题是,如何在Javaland中为这两个spri

我正在使用下面的配置设置。@configuration类加载属性文件,然后生成一个arraylist,它以依赖于barUserList和fooUserList的类可以轻松使用的方式提取属性文件的相关块。他们甚至不知道它来自一个属性文件。哈扎迪

当我试图告诉Spring我想要哪一个时,我的问题就来了。Foo类需要fooUserList,所以我应该能够使用@Qualifier注释,但是我找不到在XML之外使用/set/Qualifier的方法

所以我的问题是,如何在Javaland中为这两个springbean设置限定符?零XML配置对我来说是一个很大的目标。我知道您可以设置@name,Spring的@qualifier机制将默认为@name,但我希望避免使用它。我不喜欢“默认”于其他事物的事物

我使用的是Spring3.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;
    }
}
@配置
公共类AppConfig{
@豆子
Properties loadProperties()引发IOException{
属性=新属性();
加载(新文件输入流(“checker.properties”);
归还财产;
}
@豆子
@自动连线
ArrayList barUserList(属性){
ArrayList barUsernames=新的ArrayList();
Collections.addAll(barUsernames、properties.getProperty(“site.bar.watchedUsernames”).split(“,”);
返回用户名;
}
@豆子
@自动连线
ArrayList fooUserList(属性){
ArrayList fooUsernames=新的ArrayList();
Collections.addAll(fooousernames,properties.getProperty(“site.foo.watchedUsernames”,”).split(“,”);
返回用户名;
}
}

一种方法是为
@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;
}
@Bean(name=“barUserList”)
@自动连线
ArrayList barUserList(属性){
ArrayList barUsernames=新的ArrayList();
Collections.addAll(barUsernames、properties.getProperty(“site.bar.watchedUsernames”).split(“,”);
返回用户名;
}
在使用过程中,您可能会遇到以下情况:

// ...
@Autowired
@Qualifier("barUserList")
private List<String> userList;
// ...
/。。。
@自动连线
@限定符(“barUserList”)
私有列表用户列表;
// ...

这个名字的用途是什么?我还要“踩”别的什么吗?或者这个名字不是真的用于我的目的?我不打算基于名称进行任何自动布线。本例中的名称用于定义使用的是
List
的哪个实例。在您的例子中,您可以从
@Bean
中释放名称,因为在没有提供名称的情况下使用方法的名称。我不喜欢使用字符串,因为它们在重构中变得非常复杂,我通常做的是定义一个限定符注释,并使用它将
@Bean
创建绑定到
@Autowired
使用它,您可以通过示例找到有关定义名为
@Offline
的注释的更多信息。