如何在Spring Boot中基于​​配置文件动态注入依赖项

时间:2019-09-02 09:24:47

标签: java spring-boot dependency-injection autowired

假设我在以下设置下进行操作,一个接口有一个方法“ addTaxTrans()”

 public interface TaxTransInterface {

 Response<Map<String, Object>> addTaxTrans(Long sessionId, TaxMap taxMap);

 }

我用此接口实现了两个类。

客户1的首次抵押

@component
public class Client1TaxImpl implements TaxTransInterface{

 @Override
 public Response<Map<String, Object>> addTaxTrans(Long sessionId,
  TaxMap taxMap) {

 // Common code + client 1 customization code
  }
 }

客户端2的第二种实现

 @component
 public class Client2TaxImpl implements TaxTransInterface{

 @Override
 public Response<Map<String, Object>> addTaxTrans(Long sessionId,
 TaxMap taxMap) {

  // Common code + Client 2 customization code
   }
 }

下面是服务实现,因此在这里我自动连接TaxTransInterface并调用addTaxtrans方法。

   @Service.
  public class TaxSerImpl implements TaxSer {

  @Autowired
  private TaxTransInterface taxTransInterface;

   @Override
  @Transactional(rollbackFor = Exception.class)
  public Response<Map<String, Object>> addTax(TaxReq taxReq) {

  // Calling Trans Function
   return taxTransInterface.addTaxTrans(taxReq.getSessionId(), 
   taxReq.getTaxMap());
  }
}

截至目前,我无法运行项目并出现以下错误:-

Field taxTransInterface required a single bean, but 2 were found:

我知道会出现此错误,因为接口“ TaxTransInterface”有两个实现

那么当我通过以下配置文件client1的命令运行应用程序时,我们有没有动态选择的选项?

 java -jar -Dspring.profiles.active=client1 sbill-0.0.1-SNAPSHOT.war

然后应动态注入“ Client1TaxImpl”,并且在为client2运行应用程序时应注入“ Client2TaxImpl”。

有什么建议吗?

谢谢。

1 个答案:

答案 0 :(得分:7)

@Component为您的@Profile("profilename")类注解,以便根据配置文件注入组件。