Tenho um cenario que é o seguinte
package a.repository;
public interface TipoRecursoHumanoRepository {
}
package a.repository.impl;
import a.repository.TipoRecursoHumanoRepository;
@Component
public class TipoRecursoHumanoRepositoryImpl implements
TipoRecursoHumanoRepository {
}
package b.repository;
public interface TipoRecursoHumanoRepository {
}
package b.repository.impl;
import b.repository.TipoRecursoHumanoRepository;
@Component
public class TipoRecursoHumanoRepositoryImpl implements
TipoRecursoHumanoRepository {
}
Entao são 2 interfaces diferentes com suas respectivas implementações , só possuem o mesmo nome em comum .
A que esta no pacote ‘a’ veio de um jar de outro projeto que vou usar tambem como dependencia . E a que esta no pacote ‘b’ foi implementada no proprio projeto . Quando tento injetar a b no costrutor de um controller ou repositorio ele tenta fazer cast pra que veio no jar dando class cast exception . Exemplo :
package b.controller;
import b.repository.TipoRecursoHumanoRepository;
@Resource
public class MyController {
private TipoRecursoHumanoRepository repository;
MyController(TipoRecursoHumanoRepository repository){
this.repository = repository;
}
}
estoura a exception classcastexception:
can't cast b.repository.TipoRecursoHumanoRepository to a.repository.TipoRecursoHumanoRepository
mesmo usando nome qualificado no construtor do fonte nao resolveu , agora se eu troco o nome da implementacao do pacote ‘b’ para TipoRecursoHumanoRepositoryImplB ai funciona certinho . Creio ser um bug isso , agora nao sei se é do vraptor na hora de registrar os componentes ou do guice na hora de buscar a implementacao . Procede isso ?