AnswerBun.com

Implicações de @Autowired em construtor e fora

Stack Overflow em Português Asked by Daniela Morais on September 26, 2021

Ao trabalhar com Spring percebo dois padrões de utilizar o @Autowired, declarar dentro do construtor e fora.

Construtor

@Service
public class myService { 
    private final PartnerRepository partnerRepository;
    private final RequestorRepository requestorRepository;

    @Autowired
    public myService(PartnerRepository partnerRepository, RequestorRepository requestorRepository) {
        this.partnerRepository = partnerRepository;
        this.requestorRepository = requestorRepository;
    }

Sem construtor

@Service
public class myService { 
        @Autowired
        PartnerRepository partnerRepository;
        @Autowired 
        RequestorRepository requestorRepository;

        //methods
}

Qual a utilidade de cada um dos casos e por quê preferir um ao invés do outro? Pessoalmente sempre utilizei fora do construtor apenas parecer mais elegante.

A única implicação direta que percebi foi para testes unitários com Mockito e JUnit, ao utilizar fora do construtor é necessário utilizar @Spy (resposta no SOen) e ao utilizar no construtor é possível fazer uma instanciação direta com o new.

 MyService myService = Mockito.spy(new MyService(partnerRepository, requestorRepository));

One Answer

Todas as formas servem para o mesmo objetivo, e se obtém o mesmo resultado final. A vantagem de ser no construtor é:

  • Identificar explicitamente quais as dependências
  • As dependências podem ser final
  • Facilita na criação de testes. Fica mais fácil injetar mocks, você pode fazer isso usando o próprio construtor da classe, não necessitando de reflexão.

Usar um ou outro fica na sua escolha.

Answered by Humberto Machado on September 26, 2021

Add your own answers!

Related Questions

Como subtrair e somar datas com javascript?

1  Asked on January 27, 2021 by user8811593

   

Quais as principais diferenças entre Dart e TypeScript?

1  Asked on January 26, 2021 by maniero

   

Extrair vários valores de uma variável

1  Asked on January 26, 2021 by rodrigo-zoz

 

restore dump com nodejs

1  Asked on January 25, 2021 by max-rogrio

     

Atribuir retorno de findOne para uma variavel global node Node.js

3  Asked on January 24, 2021 by eduardo-pessoa

   

Atalhos de teclado do VSCode para comentários

1  Asked on January 24, 2021 by gratefullydead

 

Por que fgetc(stdin) não reconhece o fim de um arquivo?

0  Asked on January 23, 2021 by antharie

 

Erro ao criar um objeto servlet

0  Asked on January 21, 2021 by andy-rb

   

Axios retornando HTML de dados, não JSON

1  Asked on January 21, 2021 by carlos-souza

         

Acessar pasta especifica da galeria

2  Asked on January 20, 2021 by juliano-morche

 

meu código não entra na onActivityResult (kotlin)

1  Asked on January 17, 2021 by jos-otavio

     

Ask a Question

Get help from others!

© 2023 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP