假设我在以下设置下进行操作,一个接口有一个方法“ 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”。
有什么建议吗?
谢谢。
答案 0 :(得分:7)
用@Component
为您的@Profile("profilename")
类注解,以便根据配置文件注入组件。