1
resposta

Utilização de composição no Spring

Boa noite! Tenho uma dúvida há algum tempo, e fazendo este curso, bati de frente com ela novamente... Na classe AutenticacaoViaTokenFilter, para realizar a chamada do método de verificação da validade do token da classe TokenService, foi necessário criar um construtor somente para receber como parâmetro o tokenService. Por qual motivo eu simplesmente não posso utilizar a composição nesta classe (declarar uma variável "private TokenService tokenService") e utilizar seus métodos?

Tenho em mente que seja pelo fato da classe TokenService, utilizar da annotation @Service, mas não consigo entender o motivo pelo qual ela fica "desqualificada" para se trabalhar com composição.

Espero ter sido claro em meu questionamento!

Qualquer dúvida, estou à disposição.

Grato!

1 resposta

Oi Artur,

O problema é que não é possível realizar injeção de dependências dentro da classe AutenticacaoViaTokenFilter. Tipo assim:

public class AutenticacaoViaTokenFilter extends OncePerRequestFilter {
    @Autowired    
    private TokenService tokenService;
    @Autowired
    private UsuarioRepository repository;

    //resto do codigo...
}

O @autowired não funciona dentro dessa classe, pois não é o Spring quem instancia ela, e sim a gente dentro da classe SecurityConfigurations:

.and().addFilterBefore(new AutenticacaoViaTokenFilter(tokenService, usuarioRepository), UsernamePasswordAuthenticationFilter.class);

Bons estudos!