1
resposta

Uso do private final, por que devemos colocar no construtor a referencia dessa instancia e por que no SpringDataApplication a gente instancia novamente?

Boa tarde (noite, dia, madrugada...)

Não ficou muito claro pra mim o porquê de instanciar na service, jogar no construtor a declaração private final e, depois, no SpringDataApplication a gente precisa de novo colocar o private final, jogar ele no construtor dele e instanciar.

É tão confuso que fiquei com a dúvida rs.

Explicando o motivo da dúvida: quando eu precisar criar esse tipo de aplicação, sempre terei que fazer esse movimento?

Explicando em código e exemplos a dúvida: Na class RelatorioFuncionarioDinamico, fizemos a seguinte declaração: private final FuncionarioRepository funcionarioRepository;

depois, abrimos o construtor e dizemos que o argumento do método aponta para para esse final:

public RelatorioFuncionarioDinamico(FuncionarioRepository funcionarioRepository) {
        this.funcionarioRepository = funcionarioRepository;
    }

Mas lá no SpringDataApplication a gente fez de novo o mesmo movimento, mas agora para a class RelatorioFuncionarioDinamico. declarou: private final RelatorioFuncionarioDinamico relatorioFuncionarioDinamico;

E no construtor do SpringDataApplication fizemos mesmo movimento da class service:

public SpringDataApplication(<(...)outrasSemelhantes>,
            RelatorioFuncionarioDinamico relatorioFuncionarioDinamico) {
        //outros semelhantes (...)
        this.relatorioFuncionarioDinamico = relatorioFuncionarioDinamico;
    }

Por que fizemos isso? Eu sempre terei que fazer isso? Qual motivo de usar o final? Acho que essa minha principal dúvida, não ficou claro o uso do final e, depois, no construtor, a gente instancia ele. O que é do Spring aqui e o que é simplesmente questão do Java?

Obrigado!

1 resposta

Olá Yago, tudo bem?

Entendo que a utilização do private final pode gerar dúvidas, mas é uma boa prática em Java para garantir que o valor atribuído a essa variável não seja modificado após a sua inicialização.

No caso do Spring, a utilização do private final no construtor da classe de serviço é uma forma de injetar a dependência do repositório de funcionários nessa classe. Isso permite que a classe de serviço utilize os métodos do repositório sem precisar instanciá-lo diretamente, o que facilita a manutenção do código e evita problemas de concorrência.

Já no SpringDataApplication, a instância da classe de serviço é necessária para que possamos utilizar os métodos que foram definidos nela. Por isso, é necessário passar a instância da classe de serviço como argumento no construtor do SpringDataApplication.

A utilização do final em conjunto com o private garante que a variável só será inicializada uma vez e não poderá ser modificada posteriormente. Isso é importante para garantir a integridade dos dados e evitar problemas de concorrência.

Em resumo, o uso do private final é uma boa prática em Java para garantir a integridade dos dados, e no caso do Spring, é uma forma de injetar dependências e evitar problemas de concorrência.

Espero ter ajudado a esclarecer suas dúvidas. Bons estudos!