java - Spring在构造函数中使用泛型多次创建泛型服务

标签 java spring

我有一个使用一些对象作为通用对象的服务

@Component
@RequiredArgsConstructor
public class SomeGenericService<T extends Base> {
    private final T base;

    public void someWork(String info) {
        base.someAction(info);
    }
}

我还有 3 个 Base 实现标记为 @Component(Base1, Base2, Base3 )

我希望 spring 自己创建一个具有它需要的泛型的服务,如下面的例子

@Component
@RequiredArgsConstructor
public class Runner implements CommandLineRunner {
    private final SomeGenericService<Base1> s1;
    private final SomeGenericService<Base2> s2;
    private final SomeGenericService<Base3> s3;

    @Override
    public void run(String... args) throws Exception {
        String someString = "text";

        s1.someWork(someString);
        s2.someWork(someString);
        s3.someWork(someString);
    }
}

但是在启动之后,spring 不明白我想从它那里得到什么。

Parameter 0 of constructor in SomeGenericService required a single bean, but 3 were found:
    - base1: defined in file [Base1.class]
    - base2: defined in file [Base2.class]
    - base3: defined in file [Base3.class]

是否可以将其设置为自动,而无需通过每个服务的 @Bean 注释手动配置?

最佳答案

您需要定义应该如何注入(inject)这些 bean。为此,最好使用一些 @Configuration。像这样的东西:

 @Configuration
 @Import({
            Base1.class,
            Base2.class,
            Base3.class
    })
    public class SomeConfig {
        @Bean
        SomeGenericService<Base1> someGenericService1() {
            return new SomeGenericService(new Base1());
        }
        @Bean
        SomeGenericService<Base2> someGenericService2() {
            return new SomeGenericService(new Base2());
        }
        @Bean
        SomeGenericService<Base3> someGenericService3() {
            return new SomeGenericService(new Base3());
        }
    }

关于java - Spring在构造函数中使用泛型多次创建泛型服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71090734/

相关文章:

java - 如何删除缓存中的条目

java - 如何使用通配符名称发现 Java jar 中的资源?

java - ArrayBlockingQueue 如何避免混洗数组元素?

java - 获取 OutOfBound 异常

java - 为什么 org.aopalliance.intercept.Joinpoint#proceed 抛出 Throwable ?

java - 如何安排一天一次的 Hibernate 程序

java - 如何将 Spring Integration XML 重构为注释支持?

java - Autowiring 构造函数和字段

java - 使用 HashMap 的 hashCode() 方法

Java,听众建议,swing comp's