= CDI @Qualifier
:index-group: CDI
:jbake-type: page
:jbake-status: published

== Introdução

As vezes precisamos escrever várias implementações para uma interface de regras de negócios, para aumentar o desacoplamento vamos injetar apenas a interface e o CDI vai escolher a implementação correta, para ajudar o CDI com esta escolha nós criamos os **qualificadores**.

== Exemplo

Neste exemplo, temos uma interface `Payment` e suas implementações: 
* Cash
* CreditCard 

Em nosso teste (Payment Test) nós injetamos somente a interface Payment, sem o recurso Qualificador, o CDI não saberia qual implementação injetar no teste.

Nós criamos um **qualificador** chamado `PaymentQualifier` um único qualificador com uma diferença, a anotação `@Qualifier`.

[source,java]
----
@Retention(RUNTIME)
@Target({ TYPE, FIELD, METHOD })
@Qualifier
public @interface PaymentQualifier {

	PaymentType type();	
}
----

Este qualificador tem um método chamado `type()`, esse método ajudará o CDI a injetar corretamente a implementação. veja este enum:

[source,java]
----
public enum PaymentType {

	CASH,
	CREDITCARD
}
----

agora veja uma implementação

[source,java]
----
@PaymentQualifier(type=PaymentType.CASH)
public class Cash implements Payment {

	@Override
	public String pay() {
		
		return "cash";
	}
}
----

Cada implementação deve ser marcada com este qualificador.

Como injetar ? veja a simplicidade

[source,java]
----
public class PaymentTest {

    private static EJBContainer container;

    @Inject
    @PaymentQualifier(type=PaymentType.CREDITCARD) //qualificador informando o CDI sobre a implementação correta
    private Payment paymentCreditCard;
    
    @Inject
    @PaymentQualifier(type=PaymentType.CASH) //qualificador informando o CDI sobre a implementação correta
    private Payment paymentCash;

    @BeforeClass
    public static void start() {
        container = EJBContainer.createEJBContainer();
    }

    @Before
    public void setUp() throws Exception {
        container.getContext().bind("inject", this);
    }

    @Test
    public void mustReturnCreditCard() {
    	
        assertEquals(paymentCreditCard.pay(), "creditCard");
    }
    
    @Test
    public void mustReturnCash() {
    	
        assertEquals(paymentCash.pay(), "cash");
    }

    @AfterClass
    public static void stop() {
        container.close();
    }
}

----
