Error creating bean with name ‘contatoController’: Injection of resource fields failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [dao.ContatoDAO] is defined: Unsatisfied dependency of type [interface dao.ContatoDAO]: expected at least 1 matching bean, por favor qual a solução deste problema
Sou iniciante e existem erros que ainda não entraram na minha lista de apredizado, por exemplo
11 Respostas
favor postar seus códigos.
package daoImp;
import java.util.List;
import model.Contato;
import org.hibernate.Criteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.transaction.annotation.Transactional;
import dao.ContatoDAO;
public class ContatoDAOImp extends GenericDAOImp<Contato, Long> implements ContatoDAO{
@Override
@Transactional
public List<Contato> findbyExample(Contato contato) {
Criteria criteria = criaCriteria();
if(!(contato.getNome().isEmpty())){
criteria.add(Restrictions.ilike("nome", contato.getNome(),MatchMode.ANYWHERE));
}
if(!(contato.getApelido().isEmpty())){
criteria.add(Restrictions.ilike("apelido", contato.getApelido(),MatchMode.ANYWHERE));
}
criteria.addOrder(Order.asc("apelido"));
return (List<Contato>)criteria.list();
}
}
package dao;
import java.util.List;
import model.Contato;
public interface ContatoDAO extends GenericDAO <Contato, Long>{
List<Contato> findbyExample(Contato contato);
}
package controller;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import model.Contato;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import dao.CargoDAO;
import dao.ContatoDAO;
@Component
@Scope("globalSession")
public class ContatoController {
Contato contato,contatoFiltro;
@Resource
ContatoDAO dao;
List<Contato> contatos;
void limpar(){
contato = new Contato();
contatoFiltro = new Contato();
contatos = new ArrayList<Contato>();
}
public ContatoController(){
limpar();
}
public Contato getContato() {
return contato;
}
public void setContato(Contato contato) {
this.contato = contato;
}
public Contato getContatoFiltro() {return contatoFiltro;}
public void setContatoFiltro(Contato contatoFiltro) {this.contatoFiltro = contatoFiltro;}
public List<Contato> getContatos() {
try {
if(contatos.size()==0){
contatos = dao.todos("nome");
}}catch(Exception e){
e.printStackTrace();
}
return contatos;
}
public void setContatos(List<Contato> contatos) {this.contatos = contatos;}
public String listar(){
limpar();
return "listarContatos";
}
public String novo(){
limpar();
return "cadastrarContato";
}
public void filtrar(){
contatos = dao.findbyExample(contatoFiltro);
}
}
pronto agora acho que estou sendo mais completo.
package dao;
import java.util.List;
import model.Contato;
public interface ContatoDAO extends GenericDAO <Contato, Long>{
List<Contato> findbyExample(Contato contato);
}
você está definindo um método ou atributo.
Se for método use {} no final da declaração e não ;
Na verdade está correto, ele está só declarando o metodo a ser implementado pela classe que for implementar a interface. Deve ser finalizado com ‘;’ mesmo.
e quanto aos modificadores ele pode usar ou não public, private e protected?
Não, por default ele é público e não pode receber outro modificador. Geralmente o pessoal coloca por convenção de código do Java.
Cara, se você é iniciante, tem certeza que queres começar a programar usando um Framework como Spring que usa vários dos conceitos avançados de Programação como a DI. ???
Não seria o caso de você começar com Projetos de iniciante ??? Entender a sintaxe da linguagem, coisas assim ???
Abs []
Concordo com o Adriano.
E mateus, assim:
1 - Todos os métodos declarados em uma interface, são, obrigatoriamente public e abstract, o que torna obrigatório a classe que implemente essa interface tenha uma implementação do método. Você não pode alterar essa definição.
2 - Toda variavél é public,static e final, ou seja, imutavél e também não podes mudar essa definição.
Ou seja:
public abstract void print();
É igual á:
void print();
No que refere-se a interface. O mesmo vale para a variavél, só que passa a ser public static final.
Abraços.
adriano_si tem razão, você vai bater muito a cabeça usando os frameworks. Um dos propositos de eles existirem é para que nós possamos agilizar o desenvolvimento e diminuir a quantidade de linhas enorme que sempre escrevemos. No seu caso voce nao sabe o que esta acontecendo por tras do framework, o que é muito bom saber como ele faz pois você terá mais dominio da situação.
Valeu pessoal, sei que meti os pés pela mão, é que estou em um projeto no qual um amigo de trabalho(o cara sabe) está me dando toques e para não pertubalo vim ao forum e desde já agradeço a todos que me ajudaram e aconselharam, valeu mesmo.