Estou tentando entender a diferença entre alternative e specialises mas eles me parecem fazer exatamente a mesma coisa, a unica diferença que encontrei ao que me parece é que specialized usa herança .
Estou tentando entender a diferença entre alternative e specialises mas eles me parecem fazer exatamente a mesma coisa, a unica diferença que encontrei ao que me parece é que specialized usa herança .
Fala aí Alexandre, blz?
O @Specializes é justamente para uso de herança, quando você quer criar uma especialização de algum bean já existente.
Já o @Alternative é sempre uma alternativa para um bean. Vamos exemplificar o @Alternative com um `EntityManager.
Você em seu projeto criou um produtor de EntityManager que acessa o banco de produção.
Porém quando você está em desenvolvimento você não quer que esse EntityManager que acessa o banco de produção seja injetado.  Você poderia usar um outro produtor de EntityManger que acessa um banco de dados local ou de desenvolvimento. Anota esse produtor com @Alternative e habilita ele no beans.xml.
Dessa forma ao rodar em desenvolvimento sempre será injetado uma alternativa para o EntityManager ao invés de injetar o que se conecta ao banco de produção.
Um uso bem comum para @Alternative é para evolução de uma classe especifica. Vamos supor que você está em um sistema legado, e precisa fazer uma alteração grande em uma determinada classe e essa classe implementa uma interface. 
Você pode criar outra classe que implemente essa interface e anota-la com @Alternative e habilita-la (via bean.xml ou @Priority). Fazendo isso você deixará de utilizar a versão antiga da classe e passará a utlizar a versão nova (a alternativa).
Espero ter ajudado!