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



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

@Component
@RequiredArgsConstructor
public class SomeGenericService<T extends Base> {
private final T base;
public void someWork(String info) {
base.someAction(info);
}
}

我还有3个用@Component(Base1Base2Base3(标记的Base实现

我希望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);
}
}

但在发布后,春天不明白我想从中得到什么。

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注释手动配置?

您需要定义应该如何注入这些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());
}
}

最新更新