SpringBoot如何获取Bean列表
# SpringBoot如何获取Bean列表
在使用Spring的时候,我们常常需要收集一类Bean,然后通过Autowired把它加到我们的Bean中。这里讲解两个办法,一种方法是通过类型,别一种方法则是通过注解。
# 方法一:类型
首先我们定义一个接口,比方说是Provider
:
public interface Provider
{
}
1
2
3
4
2
3
4
然后实现一堆Providers
:
@Component
public class OneProvider implements Provider
{
}
@Component
public class TwoProvider implements Provider
{
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
我们想把所有实现了Provider
接口的Bean都放到我的Manager类实例中:
@Component
public class ProviderManager
{
// 这里注入了所有类型是Provider的Bean
@Autowired
private List<Provider> providers;
}
1
2
3
4
5
6
7
2
3
4
5
6
7
这种方法有点问题,就是所有的Bean都要实现一个接口类型,如果是一些第三方类库的类的话,它就不能用了。那我们用第二种方法,注解。
# 方法二:注解
首先我们要先定义一个用来做标记用的注解:
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Qualifier // 这一行是重点
public @interface Provider
{
}
1
2
3
4
5
6
7
2
3
4
5
6
7
然后同样的,我们要定义一些Bean类,当然,我们要用我们定义的Provider进行注解标记:
@Component
@Provider
public class OneProvider
{
}
@Component
@Provider
public class TwoProvider
{
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
我们想把所有标记了Provider
注解的Bean都放到我的Manager类实例中:
@Component
public class ProviderManager
{
// 这里注入了所有标记了`Provider`注解的Bean
@Autowired
@Provider
private List<Object> providers;
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
上次更新: 2020/12/31, 08:07:48