Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 25865|Resposta: 0

[Fonte] O Spring Boot lê (application.yml) o valor do arquivo de configuração

[Copiar link]
Publicado em 07/01/2019 15:37:14 | | | |
Primeiro application.yml perfil de configuração é o seguinte:



Maven projeta pom.xml adicionar pacotes:




Crie um novo objeto mapeado com o seguinte código:

O tipo de string deve precisar de um setter para receber valores de propriedade; Mapas, coleções e arrays não são necessários

Use @Autowired anotações para injetar automaticamente, como mostrado na imagem a seguir:



O esConfig sempre gera null, procurei uma solução por muito tempo, mas falhou, haverá uma solução abaixo.

Vamos criar um novo controlador, o código é o seguinte:

A injeção é bem-sucedida, e os valores do arquivo de configuração yml são obtidos normalmente, da seguinte forma:



As razões pelas quais o EsClient não pode ser injetado com sucesso são as seguintes:

Chame uma função dessa classe no construtor, e a variável do @Autowired dessa classe é usada nessa função.

Então achei que poderia dar errado. Porque @Autowired precisa esperar a classe ser construída antes de poder ser definida a partir de referências externas. Portanto, o tempo de injeção de @Autowired deve ser posterior ao tempo de execução do construtor.
Solução:

A Spring Team recomenda: "Sempre use injeção de dependência baseada em construtores nos seus grãos. Sempre use asserções para dependências obrigatórias".

Tradução:

Spring sugere: "Sempre estabeleça injeção de dependência com construtores no seu grão. sempre use asserções para forçar dependências".


Escrita original:

Escrita modificada:



PS: A ordem de inicialização das variáveis Java é: variáveis estáticas ou blocos de instruções estáticas – variáveis de instância > ou blocos de instruções de inicialização – >método de construção – >@Autowired

Então, por que adicionar o tipo final à variável membro?

Existe uma explicação na Internet da seguinte forma: O escopo do grão padrão na configuração de mola é singleton, que está sempre presente após a inicialização. Declare que o objeto do bean foi criado dinamicamente definindo a propriedade do escopo para prototipo. No entanto, se o seu serviço for um singleton, a injeção é executada apenas uma vez.

@Autowired em si é um modo singleton, ele só será executado uma vez quando o programa iniciar, e não será inicializado uma segunda vez mesmo que não defina um modo final, então esse final é sem sentido.

Pode ser para impedir que o construtor seja executado novamente enquanto o programa está em execução;

Ou talvez seja mais fácil de entender, além de que o final só será inicializado uma vez, quando o programa começar.






Anterior:Spring Boot+maven para construir projetos rapidamente
Próximo:Memorabilia da Internet da China 2018 lançada
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com