我讀過的問題在這裏的計算器,如:春天一類不自動裝配場構造
- Anyway to @Autowire a bean that requires constructor arguments?
- How to @Autowire bean with constructor
我也看到了這些問題,提供的鏈接如3.9.3 Fine-tuning annotation-based autowiring with qualifiers但我沒有嘗試過。
這裏是我的類:
public class UmbrellaRestClient implements UmbrellaClient {
private static final Logger LOGGER = LoggerFactory.getLogger(UmbrellaRestClient.class);
private static final Map<String, String> PARAMETROS_INFRA_UMBRELLA = ApplicationContextProvider.getApplicationContext().getBean(ParametrosInfraComponent.class)
.findByIdParametroLikeAsMap("%UMBRELLA%");
private final HttpConnectionRest conexaoHttp;
@Autowired
@Qualifier
private TemplateLoaderImpl templateLoader;
public UmbrellaRestClient(final String url) {
this.conexaoHttp = new HttpConnectionRest(UmbrellaRestClient.PARAMETROS_INFRA_UMBRELLA.get("UMBRELLA_HOST") + url, "POST", true);
}
/**
* {@inheritDoc}
*/
@Override
public String enviarNfe(final String cnpjFilial, final String idPedido, final BigDecimal valorGNRE, final String arquivoNfe) {
if (StringUtils.isBlank(arquivoNfe)) {
throw new ClientException("Arquivo de NF-e não carregado.");
}
final String usuario = StringUtils.defaultIfBlank(UmbrellaRestClient.PARAMETROS_INFRA_UMBRELLA.get("USUARIO_UMBRELLA"), "WS.INTEGRADOR");
Map<String, String> parametrosTemplate = new HashMap<>(6);
parametrosTemplate.put("usuario", usuario);
parametrosTemplate.put("senha", StringUtils.defaultIfBlank(UmbrellaRestClient.PARAMETROS_INFRA_UMBRELLA.get("SENHA_UMBRELLA"), "WS.INTEGRADOR"));
parametrosTemplate.put("valorGNRE", valorGNRE.toPlainString());
parametrosTemplate.put("idPedido", idPedido);
parametrosTemplate.put("cnpjFilial", cnpjFilial);
parametrosTemplate.put("arquivoNfe", arquivoNfe);
final String xmlRequisicao = ConverterUtils.retornarXMLNormalizado(this.templateLoader.preencherTemplate(TemplateType.ENVIO_XML_NFE, parametrosTemplate));
this.conexaoHttp.setXmlEnvio(xmlRequisicao);
UmbrellaRestClient.LOGGER.info("XML ENVIO #####################: {}", xmlRequisicao);
return this.conexaoHttp.enviarXML();
}
}
領域templateLoader不會被注入。我在其他有依賴注入和工作的類中測試過。我想這是因爲我有一個構造函數依賴於一個參數,並且這個參數是真正被每個需要使用它的類傳遞的,所以我不能在applicationContext中使用依賴注入到構造函數的參數中。
我該怎麼做才能注入田地?
請勿自行構建實例類,彈簧只能將就在bean和它控制的實例中注入依賴關係。 –
你能發表一個關於如何做的答案嗎? –
這聽起來像你真正需要的是*工廠*注入了'templateLoader',它有一個方法,該方法需要'url'並返回服務對象。 – chrylis