在使用Spring的时候,我们常常需要收集一类Bean,然后通过Autowired把它加到我们的Bean中。这里讲解两个办法,一种方法是通过类型,别一种方法则是通过注解。

方法一:类型

首先我们定义一个接口,比方说是Provider:

public interface Provider
{

}

然后实现一堆Providers:

@Component
public class OneProvider implements Provider
{

}

@Component
public class TwoProvider implements Provider
{

}

我们想把所有实现了Provider接口的Bean都放到我的Manager类实例中:

@Component
public class ProviderManager
{
    // 这里注入了所有类型是Provider的Bean
    @Autowired
    private List<Provider> providers;
}

这种方法有点问题,就是所有的Bean都要实现一个接口类型,如果是一些第三方类库的类的话,它就不能用了。那我们用第二种方法,注解。

方法二:注解

首先我们要先定义一个用来做标记用的注解:

@Target({ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Qualifier // 这一行是重点
public @interface Provider
{
}

然后同样的,我们要定义一些Bean类,当然,我们要用我们定义的Provider进行注解标记:

@Component
@Provider
public class OneProvider
{

}

@Component
@Provider
public class TwoProvider
{

}

我们想把所有标记了Provider注解的Bean都放到我的Manager类实例中:

@Component
public class ProviderManager
{
    // 这里注入了所有标记了`Provider`注解的Bean
    @Autowired
    @Provider
    private List<Object> providers;
}

原文链接:https://my.oschina.net/kut/blog/831755