我有接口(interface)EventService
和实现它的类@Component Event
。 @Component BerlinEvent
类扩展了 @Component Event
并实现了 EventService
。
在配置类上我有这个:
@Configuration
public class Configuration {
//Country name
@Bean
@ConditionalOnProperty(name = "country", havingValue = "UK")
public Event defaultService(){return new Event();}
@Bean
@ConditionalOnProperty(name = "country", havingValue = "germany", matchIfMissing = true)
public Event germanyEventService(){return new BerlinEvent();}
}
在 main 上我制作了 bean:
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(EventscraperApplication.class, args);
EventsManagerService eventsManager = context.getBean(EventsManager.class);
eventsManager.run(context.getBean(Event.class));
}
现在在类 EventsManagerService
上,我需要使用 BerlinEvent
或 Event
对象创建一个列表,具体取决于创建的 bean 以及每个对象不同的值,但我不知道该怎么做
最佳答案
Spring 可以将所有实现相同接口(interface)的 bean Autowiring 到列表中,如下所示
@Autowired
private List<Event> events;
默认情况下,只要有零个候选 bean, Autowiring 就会失败;默认行为是将带注释的方法、构造函数和字段视为指示所需的依赖项。可以更改此行为,如下所示。为了避免这种情况,您需要将附加参数传递给注释,如下所示:
@Autowired(required = false)
private List<Event> events;
这里是 Spring 文档的链接:https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-autowired-annotation
关于java - 制作 Spring Bean 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49764407/