java - 制作 Spring Bean 列表

标签 java spring dependency-injection javabeans

我有接口(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 上,我需要使用 BerlinEventEvent 对象创建一个列表,具体取决于创建的 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/

相关文章:

azure - Azure 函数中的 Autofac 依赖注入(inject)

Java - SpringMVC - 获取 Controller 中的参数

java - 排除 pom.xml 中为 jacoco 配置的内容并排除 sonar 中的文件

java - 我应该如何处理 SwingUtilities.invokeAndWait 抛出的异常

java - Tomcat com.sun.faces.context.FacesFileNotFoundException : Error

java - 在现有项目中使用依赖注入(inject)

.net - 系统丢失方法异常 : Method not found: 'Void Microsoft.Extensions.Caching.Memory.MemoryCache..ctor'

java - Firebase 无法解析为类型

java - 使用 spring 的简单嵌入式数据库

java - 如何启动spring mvc并安装依赖