Usando qualificadores do Spring Framework

Postado por em   ●   28 comentários

Provavelmente, você já precisou criar mais de uma implementação para uma mesma interface, não é?

Afinal de contas, é justamente esse o papel da interface: ser um contrato para diferentes implementações. :)

A questão é que nós, como desenvolvedores Spring, precisamos ensinar ele a decidir qual implementação usar, quando temos o tipo da interface ao invés da classe concreta.

E nessa aula você vai aprender a resolver essa questão, usando os qualificadores do Spring Framework.

Dê o play no vídeo abaixo!

O e-book que cito na aula é esse aqui:

Ebook Spring Boot

Forte abraço e até uma próxima!

PS: Você pode baixar o código-fonte de exemplo em nosso GitHub: http://github.com/algaworks/videoaula-spring-qualificadores

É graduado em Sistemas de Informação, trabalha como instrutor na AlgaWorks e está no mercado de programação Java há mais de 9 anos, principalmente no desenvolvimento de sistemas corporativos.

28 comentários sobre “Usando qualificadores do Spring Framework

  1. Adelcio Porto -

    Alexandre, eu gostaria de aprender como criar qualificadores customizados com Spring. Gostaria também de parabenizá-lo pelas videoaulas que são ótimas, com explicações claras e objetivas.

    1. Alexandre Afonso Autor do post-

      Muito obrigado Adelcio! Bacana que gostou.

      E valeu pela sugestão!

      Abraço!

  2. André Ozawa -

    Olá Alexandre!
    Primeiramente parabéns pela aula, didática e conhecimento.

    Gostaria de saber porque não injetar a classe Sms ou Email diretamente? Seria somente pelo propósito da aula ou possui algum outro motivo?

    Valeu! Abs

    1. Alexandre Afonso Autor do post-

      Obrigado André!

      Isso foi porque o conceito utilizado foi o conceito de “notificação”. E uma notificação ela pode ser feita de várias formas: e-mail, sms, uma mensagem dentro da própria aplicação (como o Facebook faz).

      E, como você já até imaginou, foi para poder explicar esse conceito de qualificadores.

      Mas, “Email” e “Sms”, poderiam ser injetadas diretamente. Daí, claro, não seria necessário um qualificador.

      Abraço!

  3. Márcio Koch -

    Aula show Alexandre!
    Gostaria de saber como criar qualificadores customizados.

    1. Alexandre Afonso Autor do post-

      Valeu Márcio!

      E obrigado também por ter deixado sua sugestão!

      Abraço!

  4. João -

    Parabéns pela aula, didática incrível.
    Gostaria de saber se vocês tem alguma aula sobre a criação de anotações personalizadas para o Java?

    1. Alexandre Afonso Autor do post-

      Legal que gostou João!

      Infelizmente, não temos.

      Na verdade, criar uma anotação não é difícil, sua dificuldade deve ser o porquê de criar uma anotação e como fazer para utilizá-la, seria isso?

      De qualquer forma vou considerar isso na nossa lista de próximos conteúdos.

      Abraço!

  5. william -

    Muito legal isso de Qualificadores. Da para trabalhar com diversas implementações.

    1. Alexandre Afonso Autor do post-

      Sim, é um recurso importante para quem deseja trabalhar se organizando com interfaces.

      Abraço William!

  6. Fabio -

    Muito legal!
    Como faz para qualificadores customizados?

    1. Alexandre Afonso Autor do post-

      Fábio, basicamente, é uma anotação anotada com outra.

      Vamos considerar os pedidos que estão sendo feitos nessa aula para nossa lista de próximos conteúdos. :)

      Abraço!

  7. Glauber -

    Muito bom mesmo !
    Alexandre, eu gostaria de aprender como criar qualificadores customizados com Spring.

    1. Alexandre Afonso Autor do post-

      Valeu por deixar sua sugestão aqui Glauber!

      Abraço!

  8. Ismael Domingos Junior -

    Olá Alexandre tudo bom?

    Como eu iria fazer no caso do pattern strategy?
    Para resolver meu problema criei uma classe intermediária com um objeto do tipo da minha interface (Strategy) pego o bean que eu preciso do contexto (Através de um Enum) setto ele nessa classe intermediária, e nela tem um método que chama o método que é único para N classes que implementarão essa interface.

    1. Alexandre Afonso Autor do post-

      Tudo bem, e você Ismael?

      O que você precisa seria de algo como qualificadores dinâmicos? Para esse caso, além de qualificar, você vai ter de criar uma espécie de fábrica (ou utilizar o AplicationContext diretamente).

      Abraço!

  9. João Antônio Cabral -

    Qual seria a vantagem de usar dessa forma ao invés de usar as implementações diretamente.

    Neste caso por exemplo, eu não posso usar um if para saber se a mensagem é urgente ou não baseado em algum outro valor, por exemplo

    1. Alexandre Afonso Autor do post-

      Olá João!

      Na verdade, o contexto em que utilizamos um “if” e um qualificador é diferente. Qualificadores do Spring da forma que ensinei nessa aula, em tempo de execução, são estáticos. Já os “if”s são dinâmicos.

      Você sempre vai poder resolver, o problema que os qualificadores resolvem, com um “if”. A grande questão é que o código fica mais enxuto com o uso dos qualificadores.

      Abraço!

  10. Luciano -

    Olá Alexandre.
    achei ótimo o video.
    eu sou da área de desenvolvimento desde 1991… já passei por diversas linguagens e tinha muito receio do java. não me inspirava segurança. até que conheci os cursos da algaworks, aquele do desenvolvimento de um sistema comercial com primefaces.
    foi amor a primeira vista, me apaixonei e desmistificou muito o java…

    eu estou tento dificuldade de leitura de alguns exemplos que eu pego na net. pq os mesmos utilizam muitas anotações especificas do spring (iOC) e eu não consigo fazer relacionamento com o mundo CDI.

    eu gostaria muito de ver materiais explicando a fundo as anotações do spring framework.
    inclusive eu comprei o spring expert para conseguir entender, mas depois que eu comprei que vi que o foco era o padrão MVC e enfoque aprofundado no spring em si.

    por favor, você me indica algo ?

    obrigado

    1. Alexandre Afonso Autor do post-

      Luciano, se você está nos cursos Sistemas Comerciais e Spring Framework Expert, então, modéstia a parte… Heh… você está com os dois melhores cursos para começar a entender esse paralelo entre o mundo Java EE (CDI) e o Spring.

      Não sei nem o que indicar pra você. Se puder ser mais específico na sua pergunta sobre essa diferença, talvez eu possa ajudar melhor.

      Abraço!

  11. Felipe -

    Gostei da aula, e parece muito com o @Profile, lendo um pouco sobre o assunto que esta no site abaixo. O @Qualifier mesmo sendo customizado através de outra anotação, é necessário saber em tempo de desenvolvimento qual Bean vou querer utilizar. Sei la, ainda me parece mais util usar o @Profile, o que achei interessante tbm foi o @Primary.

    https://moelholm.com/2016/10/23/spring-bean-qualification/

    1. Alexandre Afonso Autor do post-

      Olá Felipe!

      As anotações @Qualifier e @Profile podem até ser usadas para resolver um mesmo problema. Mas, do ponto de vista conceitual, elas são para coisas diferentes.

      Imagine que no exemplo que eu dei na aula, tivéssemos também o “PedidoServico”. Talvez, essa classe precisasse de uma notificação através de SMS e “UsuarioServico” requisitasse somente a notificação por e-mail. Esse cenário, por exemplo, é melhor usar qualificadores, pois, temos diferentes classes da camada de serviço (ou qualquer outra camada) usando diferentes implementações.

      Abraço!

  12. Samuel -

    Ao baixar o e-book da o seguinte erro! Did not process request from 197.218.240.46 due to {Spam Sources} Scanners

  13. Denilson Linde de Almeida -

    Alexandre, bom dia.
    Já fiz alguns cursos da Algaworks, e estou implementando um projeto no meu trabalho, e tenho uma dúvida:
    Estou fazendo um cadastro onde um dos elementos é o ip(string) de um determinado site, depois preciso usar esse mesmo ip para redirecionar para este site, ´so que preciso converter esse valor em ip para funcionar. Como eu faria isso? (Estou usando o Spring boot e thymelife e o cadastro no banco do ip é varchar

    1. Alexandre Afonso Autor do post-

      Bom dia Denilson!

      Não entendi o que seria “converter o IP”. Porque se você já tem o IP, não precisa converter ele em nada. Basta redirecionar.

      Abraço!

  14. Felipe -

    Olá Alexandre.

    Esse negócio de SMS me interessou, o assunto principal não é bem esse, mas gostaria de saber o que você recomenda ser feito para implementar a classe SMS. Procurando na internet só encontrei soluções pagas, você conhece alguma solução gratis?

    1. Alexandre Afonso Autor do post-

      Olá Felipe!

      Sei que tem soluções grátis, mas a questão é que você teria que estudar. Eu cheguei a estudar isso no início da minha carreira em tecnologia (12 anos atrás) quando estudava sobre VOIP. Com certeza, sai mais barato uma solução paga que te dê facilidades de integração. :)

      Abraço!

Deixe um comentário