Lake's Blog Lake's Blog
首页
HCFrame
  • 博客搭建

    • 搜索引擎
    • SEO优化
    • 问题记录
  • Vue

    • 问题记录
  • uni-app
  • 开发

    • Spring
  • 数据库及中间件

    • Elasticsearch
    • SQL
  • 杂谈

    • 杂谈
  • 微服务

    • nacos
    • CAS
  • 算法说明

    • algorithm
  • leetCode

    • leetCode
  • 代理

    • Nginx
  • Linux

    • ubuntu
  • Docker
  • 数据库
  • 消息队列
  • openwrt
  • 友情链接
关于
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub

Lake Liu

很菜的程序员
首页
HCFrame
  • 博客搭建

    • 搜索引擎
    • SEO优化
    • 问题记录
  • Vue

    • 问题记录
  • uni-app
  • 开发

    • Spring
  • 数据库及中间件

    • Elasticsearch
    • SQL
  • 杂谈

    • 杂谈
  • 微服务

    • nacos
    • CAS
  • 算法说明

    • algorithm
  • leetCode

    • leetCode
  • 代理

    • Nginx
  • Linux

    • ubuntu
  • Docker
  • 数据库
  • 消息队列
  • openwrt
  • 友情链接
关于
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub
  • Spring

    • Spring通过URL传值不能携带"."???
    • Pathvariable注解允许参数为空吗?
    • Spring事务及隔离级别
    • Autowired实现多个实现类
    • SpringBoot集成EhCache
    • SpringBoot如何获取Bean列表
      • 方法一:类型
      • 方法二:注解
    • SpringBoot通过CacheManager集成redis做缓存
    • Spring不能将包含key值为null的map集合转换成JSON
  • 数据库及中间件

  • 杂谈

  • 微服务

SpringBoot如何获取Bean列表

# SpringBoot如何获取Bean列表

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

# 方法一:类型

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

public interface Provider
{

}
1
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

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

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

然后同样的,我们要定义一些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

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

@Component
public class ProviderManager
{
    // 这里注入了所有标记了`Provider`注解的Bean
    @Autowired
    @Provider
    private List<Object> providers;
}
1
2
3
4
5
6
7
8

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

编辑
#Spring#bean
上次更新: 2020/12/31, 08:07:48
SpringBoot集成EhCache
SpringBoot通过CacheManager集成redis做缓存

← SpringBoot集成EhCache SpringBoot通过CacheManager集成redis做缓存→

最近更新
01
IDEA行号太宽
03-11
02
uniapp中实现h5扫码功能(微信版)
08-12
03
Docker安装Rabbitmq
07-22
更多文章>
本站总访问量次 | 您是本站第位访问者
Theme by Vdoing | Copyright © 2020-2024 Lake Liu | MIT License | 背景图、Logo、头像设计@Drrizzee
  • 跟随系统
  • 深色模式
  • 浅色模式
  • 阅读模式