我在选择应该注入(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/