[RESOLVIDO] Injetar no construtor nome da Classe do Dao

2 respostas
R

Estou fazendo um DAO Genérico com o VRaptor, mas fiquei em dúvida se é possível injetar a classe da entidade.

Por exemplo:

@Component
public class DaoGenerico<T>
{
public DaoGenerico(Class<?> classe)
{
....
}
}

public class ClienteDao
{
public ClienteDao(DaoGenerico<Cliente> dao)
{
....
}
}

Como poderia ser feita a injeção da classe? Ou devo passar ela como parametro quando precisar dela no método?

2 Respostas

Lucas_Cavalcanti

por padrão, o VRaptor não vai conseguir injetar a classe…

mas se vc estiver usando o Guice, por exemplo, você poderia criar um Modulo do guice e fazer o seguinte código:

public class MeuProvider extends GuiceProvider {

	@Override
	protected Module customModule() {
		return new AbstractModule() {
                      @Override
		      protected void configure() {
                           install(super.customModule());
                      }

                      @Provides
                      public <T> DaoGenerico<T> criaDAO(TypeLiteral<T> tipo) {
                             return new DaoGenerico<T>(tipo.getRawClass());
                      }
                };
	}
}

registrar esse provider no web.xml e tirar o @Component do dao genérico…

se isso não funcionar, precisa ver como o guice se comporta com isso, mesma coisa se vc usar o spring

R

Por enquanto, vou passando a classe como parâmetro do método, se eu ver que isso vai tornar minhas classes mais “sujas”, adoto sua solução. Valeu!

Criado 24 de janeiro de 2012
Ultima resposta 26 de jan. de 2012
Respostas 2
Participantes 2