gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 05:47:04 24 4
gpt4 key购买 nike

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

@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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com