多个相同类型的 Spring Components\Beans

亚瑟科

我有一个基类Foo和多个继承自它的类。

到现在为止,我只需要每一个

所以我只是做了:

@Autowired 
private List<Foo> foos;

但是事情发生了变化,我想生成每种类型的多个对象(即x实例Foo1y实例Foo2等)

我如何使用 Spring Boot 做到这一点?

注意:我真的不需要将它填充到列表中。

编辑:

我将进一步解释我面临的问题。每个类代表一种任务(它是一个Runnable)。每个任务都有固定数量的线程。我想为每个线程实例化一个新对象。

所以我的问题是:如何利用 Spring 来解决这个问题?回到当我只需要一个实例来完成每项任务时,这很容易(参见List<Foo>示例)

利诺

TL; 博士;

我提出了一个解决方案,其中包括一些工作,但在大多数情况下更干净。

它使用一个包含所有依赖项的工厂,Foo我们Foo不再制作spring bean。因此,我们不依赖 Spring 来实例化 的n实例Foo,而是可以通过编程方式决定要创建多少个实例

这当然有一些优点和缺点:

亲:

  • 可以以编程方式创建n实例。(可以通过属性设置,可以计算,可以注入...)
  • 我们不使用 spring 来决定创建多少个实例
  • (可能还有更多,但我现在想不出更多)

和:

  • 您有为要创建的每种类型创建新类(工厂)的开销

实际答复

1.创建接口

这将用于创建n类型实例:

interface Factory<T> {
    T create();
}

2. 创建实现

必须为您要构造的每种类型执行此操作。此外,每个创建的实现都必须声明为 spring bean:

// Our object we want to create
class Foo {
    private final Dependency1 d1;
    private final Dependency2 d2;

    public Foo(Dependency1 d1, Dependency2 d2){
        this.d1 = d1;
        this.d2 = d2;
    }

    // methods of foo
}

// our factory for the object
@Component
class FooFactory implements Factory<Foo>{
    private final Dependency1 d1;
    private final Dependency2 d2;

    @Autowired
    public FooFactory(Dependency1 d1, Dependency2 d2){
        this.d1 = d1;
        this.d2 = d2;
    }

    @Override
    public Foo create(){
        return new Foo(d1, d2);
    }
}

3.注入工厂

这是在我们要创建的服务中完成nFoo

@Service
class MyService{
    private final FooFactory fooFactory;

    @Autowired
    public MyService(FooFactory fooFactory){
        this.fooFactory = fooFactory;
    }

    public void doSomething(){
        // can of course be generated with a normal for loop too
        List<Foo> foos = IntStream.range(0, 10)
            .mapToObj(i -> fooFactory.create())
            .collect(Collectors.toList());

        // do something with 10 foo instances   
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Spring中需要多个相同类型的bean

来自分类Dev

Spring Framework-相同类型的多个ModelAttributes

来自分类Dev

Spring将TaskExecutor和TaskScheduler用作相同类型

来自分类Dev

相同类型的多个@ManagedProperty

来自分类Dev

相同类型的多个@ManagedProperty

来自分类Dev

类型提示多个相同类型的参数?

来自分类Dev

Autofac解析相同类型的多个实例

来自分类Dev

注册多个相同类型的资源实例

来自分类Dev

使用2个相同类型的bean:Spring中的javax.sql.DataSource

来自分类Dev

将spring组件添加到列表以覆盖相同类型的组件

来自分类Dev

Spring:与现有类具有相同类型的自动装配bean

来自分类Dev

为什么 Spring Boot 会创建相同类型的 bean 而不管任何 @Primary 注释?

来自分类Dev

如何以html格式处理相同类型的多个输入?

来自分类Dev

注入具有多个相同类型参数的构造函数

来自分类Dev

处理相同类型的Google Cloud Messaging Server的多个响应

来自分类Dev

相同类型的多个参数的编译时方法调用验证

来自分类Dev

Json-Schema:多个相同类型的元素

来自分类Dev

在MetadataProvider中获取相同类型的多个属性

来自分类Dev

实体框架中相同类型的多个集合

来自分类Dev

加载相同类型的ServiceStack OrmLite多个引用

来自分类Dev

在同一视图中创建多个相同类型的对象

来自分类Dev

声明具有相同类型的多个TypeScript变量

来自分类Dev

相同类型的多个可选参数的构造方法选择

来自分类Dev

从多个相同类型的PL / SQL集合中选择

来自分类Dev

使用Ninject绑定相同类型的多个版本

来自分类Dev

Json-Schema:多个相同类型的元素

来自分类Dev

处理相同类型的Google Cloud Messaging Server的多个响应

来自分类Dev

在MetadataProvider中获取相同类型的多个属性

来自分类Dev

具有相同类型但名称不同的多个元素?

Related 相关文章

  1. 1

    在Spring中需要多个相同类型的bean

  2. 2

    Spring Framework-相同类型的多个ModelAttributes

  3. 3

    Spring将TaskExecutor和TaskScheduler用作相同类型

  4. 4

    相同类型的多个@ManagedProperty

  5. 5

    相同类型的多个@ManagedProperty

  6. 6

    类型提示多个相同类型的参数?

  7. 7

    Autofac解析相同类型的多个实例

  8. 8

    注册多个相同类型的资源实例

  9. 9

    使用2个相同类型的bean:Spring中的javax.sql.DataSource

  10. 10

    将spring组件添加到列表以覆盖相同类型的组件

  11. 11

    Spring:与现有类具有相同类型的自动装配bean

  12. 12

    为什么 Spring Boot 会创建相同类型的 bean 而不管任何 @Primary 注释?

  13. 13

    如何以html格式处理相同类型的多个输入?

  14. 14

    注入具有多个相同类型参数的构造函数

  15. 15

    处理相同类型的Google Cloud Messaging Server的多个响应

  16. 16

    相同类型的多个参数的编译时方法调用验证

  17. 17

    Json-Schema:多个相同类型的元素

  18. 18

    在MetadataProvider中获取相同类型的多个属性

  19. 19

    实体框架中相同类型的多个集合

  20. 20

    加载相同类型的ServiceStack OrmLite多个引用

  21. 21

    在同一视图中创建多个相同类型的对象

  22. 22

    声明具有相同类型的多个TypeScript变量

  23. 23

    相同类型的多个可选参数的构造方法选择

  24. 24

    从多个相同类型的PL / SQL集合中选择

  25. 25

    使用Ninject绑定相同类型的多个版本

  26. 26

    Json-Schema:多个相同类型的元素

  27. 27

    处理相同类型的Google Cloud Messaging Server的多个响应

  28. 28

    在MetadataProvider中获取相同类型的多个属性

  29. 29

    具有相同类型但名称不同的多个元素?

热门标签

归档