java - 在运行时选择 spring bean

标签 java spring dependency-injection

我在选择应该注入(inject)的正确 spring bean 时遇到问题。 我需要一种方法来告诉 spring 容器根据对前一个类的调用注入(inject)什么 bean。我在 xml 中完成所有 Spring bean 连接。

我的问题:这可能吗?它是否对实现有任何引用?

我创建了一些示例代码来说明我想要完成的任务。请随意更改它,以便在运行时根据所选的报告类型注入(inject)正确的 ReportHeader bean。

public enum ReportType{
    Credit,
    Annul   
}

public class ReportService {

    private ReportHeaderService reportHeaderService;
    private ReportType reportType;

    public ReportService (){}

    public setReportType(ReportType reportType){
        this.reportType = reportType;
    }

    public void setReportHeaderService(ReportHeaderService reportHeaderService){
        this.reportHeaderService = reportHeaderService;
    }

    private void generateHeader(){
        //i would like to call my service like this and have the correct bean injected to ReportHeader.
        reportHeaderService.generateHeader(reportType)
    }
}

public class ReportHeaderService {

    private ReportHeader reportHeader;

    //this will call the injected bean that needs to be selected accoring to the ReportType
    public void generateHeader(ReportType type){
        reportHeader.createHeader();
    }
}

public interface ReportHeader{
    public void createHeader();
}

public class CreditReportHeader implements ReportHeader{
    public void createHeader(){
        ..dostuff();
    }
}

public class AnnulReportHeader implements ReportHeader{
    public void createHeader(){
        ..dostuff();
    }
}

最佳答案

考虑注入(inject) Map<ReportType, ReportHeader>到 ReportHeaderService,以便generateHeader 的工作方式如下:

public class ReportHeaderService {

    private Map<ReportType, ReportHeader> reportHeaderMap;

    public void generateHeader(ReportType type){
        ReportHeader reportHeader = reportHeaderMap.get(type);
        if (reportHeader != null) {
            reportHeader.createHeader();
        }
    }
}

关于java - 在运行时选择 spring bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19046171/

相关文章:

java - 根据提供的环境属性注入(inject)不同的 bean

java - 如何检测我何时处于最后一个循环? ( lambda )

java - REST - JSONrequest 映射到 java 对象

java - 如何使用 Spring context.xml 实例化类

java - DispatchActionServletException : Request does not contain handler parameter named 'method'

java - 通过 Spring Boot application.yml 配置 Hazelcast

java - JPA 继承 IdClass

java - IOUtils.copy 第二次失败

php - 如何在简单的 php 函数中使用 "Dependency Injection",我应该打扰吗?

java - 不带 OUT 注解的 Guice 构造函数注入(inject)?