Spring MVC - erro de DI

Caros amigos,

 Estou com erro estranho na inicialização do Tomcat. Minha aplicação usa Spring MVC com DAO genérico. Estendi o conceito de DAO genérico para Service genérico, ou seja, tenho um Service genérico ( com método genérico - CRUD) que tem os outros Services que estendem este Service genérico. Este Service genérico depende do DAO genérico que possui outros DAOs que o estendem. Pois bem o meu problema está na injeção do DAO da classe Usuario no Service da classe Usuario. O DAO está anotado como Repository (ou seja um bean) o Service anotado como serviço. No log de DEBUG do Tomcat os beans são criados mas há erro na injeção. O qu estou fazendo de errado??? :(

Erro

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}

GenericSercice

package br.com.snclavalinmarte.portal.controllers.service;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;

import br.com.snclavalinmarte.portal.controllers.dao.GenericDAO;
import br.com.snclavalinmarte.portal.controllers.exception.ApplicationException;
import br.com.snclavalinmarte.portal.controllers.exception.ObjectExistsExcepetion;
import br.com.snclavalinmarte.portal.controllers.exception.ObjectNotFoundException;

@Service
@SuppressWarnings({ "unchecked", "rawtypes" })
public abstract class GenericService<T> implements Serializable
{
    private static final long serialVersionUID = 1L;
    
    // ******************** Atributos ********************

    protected GenericDAO dao;
    
    @SuppressWarnings("unused")
    private Class<T> classe;
    
    //get log4j handler
    protected static final Logger logger = Logger.getLogger(GenericDAO.class);
    
    
    // ********************** Contrutores **********************
    
    public GenericService(Class<T> classe)
    {
    	this.classe = classe; 
    }

    // ******************** Outros métodos  ********************
    
    public T create(T t) throws ApplicationException{...}

    public T update(T t){...}
  
    public void delete(T t) throws ApplicationException{...}

    public T retrieve(Long id){...}

    public List<T> retrieveAll() throws ApplicationException{...}

    public List<T> retrieveByNamedQuery(String namedQueryName) throws ApplicationException{...}

    public List<T> retrieveByNamedQuery(String namedQueryName, Map<String, Object> parameters) throws ApplicationException{...}

    public T retrieveByNamedQueryWithOneResult(String namedQueryName, Map<String, Object> parameters) throws ApplicationException{...}
    
    public List<T> retrieveByNativeQuery(String sql, Class type) throws ApplicationException{...}
}

UsuarioService

package br.com.snclavalinmarte.portal.controllers.service;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO;
import br.com.snclavalinmarte.portal.controllers.exception.ApplicationException;
import br.com.snclavalinmarte.portal.controllers.exception.ObjectNotFoundException;
import br.com.snclavalinmarte.portal.model.usuario.Usuario;

@Service
public class UsuarioService extends GenericService<Usuario>
{
    private static final long serialVersionUID = 1L;

    // ******************** Atributos ********************

    private final UsuarioDAO usuarioDAO;
    
    @Autowired
    public UsuarioService(UsuarioDAO usuarioDAO)
    {
	    super(Usuario.class);
	    this.usuarioDAO = usuarioDAO;
    }
    
    public Usuario findUserByUsername(String username) throws ApplicationException{...}
    
    public List<Usuario> findAllUsers() throws ApplicationException{...}
    
    public boolean resetPassword(Usuario usuarioConectado){...}
    
    public boolean changePassword(Usuario usuarioConectado){...}
    
    public String encryptPassword (String noEncryptedPassword){...}    
}

GenericDAO

package br.com.snclavalinmarte.portal.controllers.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.persistence.EntityExistsException;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaQuery;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import br.com.snclavalinmarte.portal.controllers.exception.ObjectExistsExcepetion;
import br.com.snclavalinmarte.portal.controllers.exception.ObjectNotFoundException;

@Repository
@SuppressWarnings({ "unchecked", "rawtypes" })
public abstract class GenericDAO<T> implements Serializable
{
    private static final long serialVersionUID = 1L;
    
    // ******************** Atributos ********************

    @PersistenceContext
    protected EntityManager em;

    //get log4j handler
    protected static final Logger logger = Logger.getLogger(GenericDAO.class);
    
    private Class<T> classe;
    
    public GenericDAO(Class<T> classe)
    {
    	this.classe = classe; 
    }

    public T create(T t) throws ObjectExistsExcepetion{...}

    public T update(T t){...}

    public void delete(T t){...}

    public T retrieve(Long id) throws ObjectNotFoundException{...}

    public List<T> retrieveAll() throws ObjectNotFoundException{...}

    public List<T> retrieveByNamedQuery(String namedQueryName) throws ObjectNotFoundException{...}

    public List<T> retrieveByNamedQuery(String namedQueryName, Map<String, Object> parameters) throws ObjectNotFoundException{...}

    public T retrieveByNamedQueryWithOneResult(String namedQueryName, Map<String, Object> parameters) throws ObjectNotFoundException{...}

    public List<T> retrieveByNativeQuery(String sql, Class type) throws ObjectNotFoundException{...}

}

UsuarioDAO

package br.com.snclavalinmarte.portal.controllers.dao;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Repository;

import br.com.snclavalinmarte.portal.controllers.exception.ObjectNotFoundException;
import br.com.snclavalinmarte.portal.model.usuario.Usuario;

@Repository
public class UsuarioDAO extends GenericDAO<Usuario>
{
    private static final long serialVersionUID = 1L;

    public UsuarioDAO()
    {
	    super(Usuario.class);
    }
    
    public Usuario findUserByUsername(String username) throws ObjectNotFoundException{...}
    
    public List<Usuario> findAllUsers() throws ObjectNotFoundException{...}
}

Log Tomcat - modo DEBUG - LOG COMPLETO NO ARQUIVO EM ANEXO.

...
18:08:40,243 DEBUG DefaultListableBeanFactory:215 - Creating shared instance of singleton bean 'usuarioDAO'
18:08:40,243 DEBUG DefaultListableBeanFactory:435 - Creating instance of bean 'usuarioDAO'
18:08:40,244 DEBUG InjectionMetadata:71 - Registered injected element on class [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO]: PersistenceElement for protected javax.persistence.EntityManager br.com.snclavalinmarte.portal.controllers.dao.GenericDAO.em
18:08:40,245 DEBUG DefaultListableBeanFactory:509 - Eagerly caching bean 'usuarioDAO' to allow for resolving potential circular references
18:08:40,259 DEBUG InjectionMetadata:85 - Processing injected method of bean 'usuarioDAO': PersistenceElement for protected javax.persistence.EntityManager br.com.snclavalinmarte.portal.controllers.dao.GenericDAO.em
18:08:40,259 DEBUG DefaultListableBeanFactory:246 - Returning cached instance of singleton bean 'entityManagerFactory'
18:08:40,260 DEBUG JdkDynamicAopProxy:115 - Creating JDK dynamic proxy: target source is SingletonTargetSource for target object [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO@2009634]
18:08:40,260 DEBUG DefaultListableBeanFactory:463 - Finished creating instance of bean 'usuarioDAO'
...
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'usuarioService' defined in file [C:\Users\marcelo\Desenvolvimento\apache-tomcat-7.0.41\webapps\portal\WEB-INF\classes\br\com\snclavalinmarte\portal\controllers\service\UsuarioService.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO]: : No qualifying bean of type [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO] 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.snclavalinmarte.portal.controllers.dao.UsuarioDAO] 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)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
	at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:651)
	at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:505)
	at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:459)
	at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
	at javax.servlet.GenericServlet.init(GenericServlet.java:160)
	at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
	at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1091)
	at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5123)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5407)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:986)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:856)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:768)
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:795)
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:723)
	... 29 more

Jul 18, 2013 6:08:40 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet /portal threw load() exception
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:986)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:856)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:768)
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:795)
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:723)
	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)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
	at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:651)
	at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:505)
	at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:459)
	at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
	at javax.servlet.GenericServlet.init(GenericServlet.java:160)
	at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
	at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1091)
	at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5123)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5407)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)

18:08:40,438 ERROR DispatcherServlet:467 - Context initialization failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'usuarioService' defined in file [C:\Users\marcelo\Desenvolvimento\apache-tomcat-7.0.41\webapps\portal\WEB-INF\classes\br\com\snclavalinmarte\portal\controllers\service\UsuarioService.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO]: : No qualifying bean of type [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO] 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.snclavalinmarte.portal.controllers.dao.UsuarioDAO] 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)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
	at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:651)
	at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:505)
	at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:459)
	at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
	at javax.servlet.GenericServlet.init(GenericServlet.java:160)
	at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
	at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1091)
	at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5123)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5407)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:986)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:856)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:768)
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:795)
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:723)
	... 29 more
...