Estou com o mesmo problema:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘tarefasController’ defined in file [/home/paulo/Downloads/apache-tomcat-7.0.39/wtpwebapps/fj21-tarefas/WEB-INF/classes/br/com/caelum/tarefas/controller/TarefasController.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [br.com.caelum.dao.JdbcTarefaDao]: : No qualifying bean of type [br.com.caelum.dao.JdbcTarefaDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [br.com.caelum.dao.JdbcTarefaDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:730)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:196)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1051)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:955)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:490)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
…
[code]package br.com.caelum.tarefas.controller;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import br.com.caelum.dao.JdbcTarefaDao;
import br.com.caelum.tarefa.modelo.Tarefa;
@Controller
public class TarefasController {
private final JdbcTarefaDao dao;
@Autowired
public TarefasController(JdbcTarefaDao dao) {
this.dao = dao;
}
@RequestMapping("novaTarefa")
public String form() {
return "tarefa/formulario";
}
@RequestMapping("adicionaTarefa")
public String adiciona(@Valid Tarefa tarefa, BindingResult result) {
if (result.hasFieldErrors("descricao")) {
return "tarefa/formulario";
}
dao.adiciona(tarefa);
return "tarefa/adicionada";
}
@RequestMapping("listaTarefas")
public String lista(Model model) {
model.addAttribute("tarefas", dao.lista());
return "tarefa/lista";
}
@RequestMapping("removeTarefa")
public String remove(Tarefa tarefa) {
dao.remove(tarefa);
return "redirect:listaTarefas";
}
@RequestMapping("mostraTarefa")
public String mostra(Long id, Model model) {
model.addAttribute("tarefa", dao.buscaPorId(id));
return "tarefa/mostra";
}
@RequestMapping("alteraTarefa")
public String altera(Tarefa tarefa) {
dao.altera(tarefa);
return "redirect:listaTarefas";
}
@RequestMapping("finalizaTarefa")
public String finaliza(Long id, Model model) {
dao.finaliza(id);
model.addAttribute("tarefa", dao.buscaPorId(id));
return "tarefa/finalizada";
}
}[/code]
[code]package br.com.caelum.dao;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import br.com.caelum.tarefa.modelo.Tarefa;
@Repository
public class JdbcTarefaDao {
private final Connection connection;
@Autowired
public JdbcTarefaDao(BasicDataSource dataSource) {
try {
//Class.forName("com.mysql.jdbc.Driver");
this.connection = dataSource.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
public void adiciona(Tarefa tarefa) {
String sql = "insert into tarefas " + "(descricao,finalizado)"
+ " values (?,?)";
try {
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, tarefa.getDescricao());
stmt.setBoolean(2, Boolean.FALSE);
stmt.execute();
stmt.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public List<Tarefa> lista() {
String sql = "select * from tarefas";
List<Tarefa> tarefas = new ArrayList<Tarefa>();
try {
PreparedStatement stmt = connection.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
Tarefa tarefa = new Tarefa();
tarefa.setId(rs.getLong("id"));
tarefa.setDescricao(rs.getString("descricao"));
tarefa.setFinalizado(rs.getBoolean("finalizado"));
Calendar data = Calendar.getInstance();
if (rs.getDate("dataFinalizacao") != null) {
data.setTime(rs.getDate("dataFinalizacao"));
tarefa.setDataFinalizacao(data);
} else {
tarefa.setDataFinalizacao(null);
}
// data.setTime(rs.getDate("dataFinalizacao"));
// tarefa.setDataFinalizacao(data);
tarefas.add(tarefa);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
return tarefas;
}
public void remove(Tarefa tarefa) {
String sql = "delete from tarefas where id=?";
try {
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setLong(1, tarefa.getId());
stmt.execute();
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
public Tarefa buscaPorId(Long id) {
String sql = "select * from tarefas where id=?";
Tarefa tarefa = new Tarefa();
try {
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setLong(1, id);
ResultSet rs = stmt.executeQuery();
rs.next();
tarefa.setId(rs.getLong("id"));
tarefa.setDescricao(rs.getString("descricao"));
tarefa.setFinalizado(rs.getBoolean("finalizado"));
Calendar data = Calendar.getInstance();
if (rs.getDate("dataFinalizacao") != null) {
data.setTime(rs.getDate("dataFinalizacao"));
tarefa.setDataFinalizacao(data);
} else {
tarefa.setDataFinalizacao(null);
}
rs.close();
stmt.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
return tarefa;
}
public void altera(Tarefa tarefa) {
String sql = "update tarefas set descricao=?,finalizado=?,dataFinalizacao=? "
+ "where id=?";
try {
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, tarefa.getDescricao());
stmt.setBoolean(2, tarefa.isFinalizado());
stmt.setDate(3, new Date(tarefa.getDataFinalizacao().getTimeInMillis()));
stmt.setLong(4, tarefa.getId());
stmt.execute();
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
public void finaliza(Long id) {
String sql = "update tarefas set finalizado=?,dataFinalizacao=? where id =?";
try {
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setBoolean(1, Boolean.TRUE);
Calendar data = Calendar.getInstance();
stmt.setDate(2, new Date(data.getTimeInMillis()));
stmt.setLong(3, id);
stmt.execute();
stmt.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
[/code]
[code]<?xml version="1.0" encoding="UTF-8"?>
<context:component-scan base-package=“br.com.caelum.tarefas” />
<mvc:annotation-driven />
<mvc:default-servlet-handler />
<mvc:interceptors>
<bean class="br.com.caelum.tarefas.interceptor.AutorizadorInterceptor" />
</mvc:interceptors>
<bean id="mysqlDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="org.gjt.mm.mysql.Driver" />
<property name="url" value="jdbc:mysql://localhost/fj21" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
[/code]
Alguém sabe a causa do erro?