Tenho a seguinte estrutura:
Repositorio
public interface Repositorio<T> {
public void save(T entity);
public void update(T entity);
public void delete(T entity);
public T load(Long id);
public List<T> listAll();
}
DaoGEnerico:
[code]
public abstract class GenericDAO implements Repositorio {
private Class<T> entityClass;
private Session session;
public GenericDAO(Class<T> entityClass, Session sessao) {
this.entityClass = entityClass;
this.session = sessao;
}
public void save(T entity) {
session.save(entity);
}
public void update(T entity) {
session.update(entity);
}
public void delete(T entity) {
session.delete(entity);
}
public T load(Long id) {
return (T) this.session.get(entityClass, id);
}
public List<T> listAll() {
return this.session.createCriteria(entityClass).list();
}
}[/code]
ProdutoDAO
@Component
public class ProdutoDAO extends GenericDAO<Produto> {
public ProdutoDAO(Session sessao) {
super(Produto.class, sessao);
}
}
UsuarioDAO
@Component
public class UsuarioDAO extends GenericDAO<Usuario> {
private Session sessao;
public UsuarioDAO(Session sessao) {
super(Usuario.class, sessao);
this.sessao = sessao;
}
public Usuario buscaPorLogin(String email) {
String hql = "select u from Usuario u where u.email = :email";
Query consulta = this.sessao.createQuery(hql);
consulta.setString("email", email);
return (Usuario) consulta.uniqueResult();
}
}
meu Controller:
@Resource
public class ProdutoController {
private final Repositorio<Produto> prod;
private final Result result;
public ProdutoController(Repositorio<Produto> produto, Result result) {
this.prod = produto;
this.result = result;
}
public void formulario() {
}
public void salvar(Produto produto) {
this.prod.save(produto);
result.redirectTo(this).lista();
}
public List<Produto> lista() {
return prod.listAll();
}
}
Meu problema: quando injeto Repositorio em ProdutoController e vou na pagina para listar, ele nao entende quem deve implementar, se é UsuarioDAO ou ProdutoDAO, quando na verdade eu quero que em ProdutoController ele implemente ProdutoDAO.
Erro:
HTTP Status 500 - Error creating bean with name 'produtoController': Unsatisfied dependency expressed through constructor argument with index 0 of type [br.com.goodbuy.repositorio.Repositorio]: : No unique bean of type [br.com.goodbuy.repositorio.Repositorio] is defined: more than one 'primary' bean found among candidates: [usuarioDAO, produtoDAO]; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [br.com.goodbuy.repositorio.Repositorio] is defined: more than one 'primary' bean found among candidates: [usuarioDAO, produtoDAO]