@Autowired

Olá,

Estou tento um problema com a annotation @Autowired.

tenho minha classe:

[code]@Component
public class CustomUserDetailsService implements UserDetailsService {

@Autowired
public GenericDao<Usuario, Serializable> genericDao;// Seu dao aqui

@Override
public UserDetails loadUserByUsername(String username)
		throws UsernameNotFoundException, DataAccessException {

	try {

		// seu metodo que faz uma consulta por login e retorna um objeto
		// User
		Usuario usuario = genericDao.findByLogin(username);

		return usuario;

	} catch (Exception e) {
		throw new UsernameNotFoundException("User not found: " + username);
	}
}

[/code]

Mas quando eu rodo, aparece esse erro:

13/01/2010 17:36:54 org.apache.catalina.core.StandardContext listenerStart SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customUserDetailsService': Autowiring of fields failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: public br.com.vetoreditora.psiconline.dao.GenericDao br.com.vetoreditora.psiconline.security.CustomUserDetailsService.genericDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [br.com.vetoreditora.psiconline.dao.GenericDao] is defined: expected single matching bean but found 9: [usuarioDao, roleDao, empresaDao, contatoComercialDao, contatosDao, perfilVagaDao, cidadeDao, estadoDao, statusDao] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessAfterInstantiation(AutowiredAnnotationBeanPostProcessor.java:243) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:959) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) at java.security.AccessController.doPrivileged(Native Method) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380) at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:516) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:578) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: public br.com.vetoreditora.psiconline.dao.GenericDao br.com.vetoreditora.psiconline.security.CustomUserDetailsService.genericDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [br.com.vetoreditora.psiconline.dao.GenericDao] is defined: expected single matching bean but found 9: [usuarioDao, roleDao, empresaDao, contatoComercialDao, contatosDao, perfilVagaDao, cidadeDao, estadoDao, statusDao] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:435) at org.springframework.beans.factory.annotation.InjectionMetadata.injectFields(InjectionMetadata.java:105) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessAfterInstantiation(AutowiredAnnotationBeanPostProcessor.java:240) ... 31 more Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [br.com.vetoreditora.psiconline.dao.GenericDao] is defined: expected single matching bean but found 9: [usuarioDao, roleDao, empresaDao, contatoComercialDao, contatosDao, perfilVagaDao, cidadeDao, estadoDao, statusDao] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:621) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:412) ... 33 more

Não sei se esta faltando alguma configuração no application-Context.mxl…

Muito obrigado desde já.

@Autowired faz autowiring por tipo, provavelmente (até pelo nome da classe) tu deve ter mais de uma classe que implemente GenericDao é este o erro que esta acontecendo.
Os parâmetros do tipo são ignorados por que em java generics não existem em tempo de execução.

Urubatan,

Eu tenho as seguintes classes para o GenericDao.

GenericDao

[code]public interface GenericDao<T, PK extends Serializable> {

boolean exists(PK id) throws DataAccessException;

T get(PK id) throws DataAccessException, ObjectRetrievalFailureException;

List<T> getAll() throws DataAccessException;

void remove(PK id) throws DataAccessException;

T save(T entity) throws DataAccessException;

public List<T> getByExample(final T example) throws DataAccessException;  

public T findByLogin(String username) throws DataAccessException;    

}[/code]

GenericDaoHibernate

[code]public class GenericDaoHibernate<T, PK extends Serializable> extends HibernateDaoSupport implements GenericDao<T, PK> {

/** Logger utilizado pela classe. */
final Logger logger = LoggerFactory.getLogger(GenericDaoHibernate.class);

/** Classe persistente do POJO que o DAO irá gerenciar. */
protected Class<T> persistentClass;

/**
 * Construtor padrão que inspeciona através do método <strong>java.lang.Class.getGenericSuperclass()</strong> qual
 * será a classe do POJO gerenciado pelo DAO.
 * 
 * @see Class#getGenericSuperclass()
 */
@SuppressWarnings("unchecked")
public GenericDaoHibernate() {

    logger.debug("Iniciando DAO Genérico \"GenericDaoHibernate()\"...");

    persistentClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}

/**
 * Construtor que recebe como parâmetro a classe do POJO que o DAO irá gerenciar. Este construtor habilita a
 * declaração do DAO no arquivo de contexto do Spring, já que a classe só será conhecida em tempo de deploy da
 * aplicação.
 * 
 * Exemplos estão disponíveis nos testes unitários deste componente.
 * 
 * @param persistentClass
 *            Classe do POJO que o DAO irá gerenciar.
 */
public GenericDaoHibernate(final Class<T> persistentClass) {

    logger.debug("Iniciando DAO Genérico \"GenericDaoHibernate" + "(Class<T>)\"...");

    this.persistentClass = persistentClass;
}

/**
 * {@inheritDoc}
 */
@SuppressWarnings("unchecked")
public boolean exists(PK id) {

    logger.debug("Verificando a existência de uma entidade [{}] através da chave primária [{}]...", persistentClass
            .getName(), id);

    T entity = (T) getHibernateTemplate().get(persistentClass, id);
    boolean exist = entity != null;

    logger.debug("Resultado da busca de uma entidade [{}] através da chave primária [{}] = [{}]", new Object[] {
            persistentClass.getName(), id, exist });

    return entity != null;
}

/**
 * {@inheritDoc}
 */
@SuppressWarnings("unchecked")
public T get(PK id) {

    logger.debug("Recuperando uma entidade [{}] através da chave primária [{}]...", persistentClass.getName(), id);

    T entity = (T) getHibernateTemplate().get(persistentClass, id);

    // Como o método "get" não dispara nenhum tipo de exception, deve-se
    // verificar se o POJO foi encontrado.
    if (entity == null) {
        logger.warn("A entidade [{}] não foi encontrada através da chave primária [{}]", persistentClass.getName(),
                id);

        throw new ObjectRetrievalFailureException(persistentClass, id);
    } else {
        logger.debug("Entidade [{}] recuperada através da chave primária [{}] = [{}]", new Object[] {
                persistentClass.getName(), id, entity });

        return entity;
    }
}

/**
 * {@inheritDoc}
 */
@SuppressWarnings("unchecked")
public List<T> getAll() {

    logger.debug("Recuperando todas as entidades [{}]...", persistentClass.getName());

    List<T> entities = (List<T>) getHibernateTemplate().loadAll(persistentClass);

    logger.debug("Lista de todas as entidades [{}] recuperandas = [{}]", persistentClass.getName(), entities);

    return entities;
}

/**
 * {@inheritDoc}
 */
public void remove(PK id) {
    logger.debug("Removendo a entidade [{}] através da chave primária [{}]...", persistentClass.getName(), id);

    try {
        getHibernateTemplate().delete(get(id));
    } catch (ObjectRetrievalFailureException e) {
        logger.warn("A entidade [{}] não foi encontrada através da chave primária [{}] para remoção",
                persistentClass.getName(), id);
    }

    logger.debug("Entidade [{}] removida através da chave primária [{}]", persistentClass.getName(), id);
}

/**
 * {@inheritDoc}
 */
@SuppressWarnings("unchecked")
public T save(T entity) {
    logger.debug("Atualizando uma entidade [{}] com novos valores [{}]...", persistentClass.getName(), entity);

    entity = (T) getHibernateTemplate().merge(persistentClass.getName(), entity);

    logger.debug("Entidade [{}] atualizada com novos valores [{}]...", persistentClass.getName(), entity);

    return entity;
}

@SuppressWarnings("unchecked")
public List<T> getByExample(final T example) {
    // O filtro é estabelecido através do conjunto de propriedades
    // do objeto example.
    HibernateCallback callback = new HibernateCallback() {
        public Object doInHibernate(Session session)
                throws HibernateException {
            // Cria o 'Criteria' utilizado na consulta.
            Criteria criteria = createCriteria(session, example);

            return criteria.list();
        }
    };

    return (List) getHibernateTemplate().execute(callback);
}

protected Criteria createCriteria(Session session, Object example) {
    // Cria o critério através da verificação do objeto example.
    Criteria criteria = null;
    if (example == null) {
        criteria = session.createCriteria(persistentClass);
    } else {
        AssociationExample ex = AssociationExample.create(example)
                .ignoreCase().enableLike(MatchMode.ANYWHERE);
        criteria = session.createCriteria(persistentClass, "ex").add(ex);
    }

    return criteria;
}

@SuppressWarnings("unchecked")
@Override
public T findByLogin(String username) throws DataAccessException {
	List<T> usuario = getHibernateTemplate().find("from Usuario where username=?", username);
    if (usuario == null || usuario.isEmpty()) {
        throw new UsernameNotFoundException("usuario '" + username + "' not found...");
    } else {
        return (T) usuario.get(0);
    }

}

}[/code]

GenericManager

[code]public interface GenericManager<T, PK extends Serializable> {

boolean exists(PK id) throws DataAccessException;

T get(PK id) throws DataAccessException, ObjectRetrievalFailureException;

List<T> getAll() throws DataAccessException;

void remove(PK id) throws DataAccessException;

T save(T entity) throws DataAccessException;

public List<T> getByExample(final T example) throws DataAccessException;

T findByLogin(String username) throws DataAccessException;

}[/code]

GenericManagerImpl

[code]@Transactional(readOnly = true)
public class GenericManagerImpl<T, PK extends Serializable> implements GenericManager<T, PK> {

/** DAO genérico usado pelos managers desta classe. */
protected GenericDao<T, PK> genericDao;

/**
 * Construtor default para instanciação direta através do operador new.
 */
public GenericManagerImpl() {
}

/**
 * Construtor que recebe uma referência do DAO para realizar as operações de CRUD junto ao banco. Mantém uma
 * referência para evitar casting do DAO nos métodos dessa classe.
 * 
 * @param genericDao
 *            DAO genérico utilizado nas operações de acesso a base de dados.
 */
public GenericManagerImpl(GenericDao<T, PK> genericDao) {
    this.genericDao = genericDao;
}

/**
 * {@inheritDoc}
 */
public boolean exists(PK id) throws DataAccessException {
    return genericDao.exists(id);
}

/**
 * {@inheritDoc}
 */
public T get(PK id) throws DataAccessException, ObjectRetrievalFailureException {
    return genericDao.get(id);
}

/**
 * {@inheritDoc}
 */
public List<T> getAll() throws DataAccessException {
    return genericDao.getAll();
}

/**
 * {@inheritDoc}
 */
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public void remove(PK id) throws DataAccessException {
    genericDao.remove(id);
}

/**
 * {@inheritDoc}
 */
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public T save(T entity) throws DataAccessException {
    return genericDao.save(entity);
}

/**
 * Método auxiliar utilizado para configurar o dao do manager.
 * 
 * @param genericDao
 *            Dao utilizado pelo manager.
 */
public void setGenericDao(GenericDao<T, PK> genericDao) {
    this.genericDao = genericDao;
}

/**
 * Método auxiliar utilizado para recuperar o dao do manager.
 * 
 * @return GenericDao<T, PK> - Dao utilizado pelo manager.
 */
public GenericDao<T, PK> getGenericDao() {
    return genericDao;
}

/**
 * {@inheritDoc}
 */
public List<T> getByExample(final T example){
	return genericDao.getByExample(example);
}

@Override
public T findByLogin(String username) throws DataAccessException {
	return genericDao.findByLogin(username);
}

}
[/code]

Para que eu possa usar o @Autowired… eu preciso adicionar algum bean no meu applicationContext.xml?
Qual seria a solução para este problema?

Muito Obrigado

Segundo a exception tu tem diversos objetos que implementam GenericDao. Estes objetos são:
usuarioDao, roleDao, empresaDao, contatoComercialDao, contatosDao, perfilVagaDao, cidadeDao, estadoDao, statusDao
para o @Autowired funcionar, tu só pode ter 1 instância de GenericDao conhecida pelo Spring.

a única solução que vejo é criar um monte de código duplicado com uma interface para cada um destes beans, e isto só vai ser necessário por causa do lixão de type erasure utilizado na implementação de generics em java …

Se eu ao inves de utilizar o GenericDao… e criar um UserDao?

Funcionaria?

Mas como ficaria o meu bean para esse UserDao no applicationContext?

obrigado

Urubatan,

Eu fiz as classes do UserDao…

UserDao

[code]public interface UserDao <T, PK extends Serializable> {

public T findByLogin(String username) throws DataAccessException;

}[/code]

UserDaoHibernate

[code]@SuppressWarnings(“unchecked”)
@Repository
public class UserDaoHibernate<T, PK extends Serializable> extends HibernateDaoSupport implements UserDao<T, PK> {

/** Logger utilizado pela classe. */
final Logger logger = LoggerFactory.getLogger(UserDaoHibernate.class);

/** Classe persistente do POJO que o DAO irá gerenciar. */
protected Class<T> persistentClass;

/**
 * Construtor padrão que inspeciona através do método <strong>java.lang.Class.getGenericSuperclass()</strong> qual
 * será a classe do POJO gerenciado pelo DAO.
 * 
 * @see Class#getGenericSuperclass()
 */
public UserDaoHibernate() {

    logger.debug("Iniciando DAO Genérico \"UserDaoHibernate()\"...");

    persistentClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}

/**
 * Construtor que recebe como parâmetro a classe do POJO que o DAO irá gerenciar. Este construtor habilita a
 * declaração do DAO no arquivo de contexto do Spring, já que a classe só será conhecida em tempo de deploy da
 * aplicação.
 * 
 * Exemplos estão disponíveis nos testes unitários deste componente.
 * 
 * @param persistentClass
 *            Classe do POJO que o DAO irá gerenciar.
 */
public UserDaoHibernate(final Class<T> persistentClass) {

    logger.debug("Iniciando DAO Genérico \"GenericDaoHibernate" + "(Class<T>)\"...");

    this.persistentClass = persistentClass;
}

@Override
public T findByLogin(String username) throws DataAccessException {
	List users = getHibernateTemplate().find("from User where username=?", username);
    if (users == null || users.isEmpty()) {
        throw new UsernameNotFoundException("user '" + username + "' not found...");
    } else {
        return (T) users.get(0);
    }

}

}[/code]

UserManager

[code]public interface UserManager <T, PK extends Serializable> {

T findByLogin(String username) throws DataAccessException;

}[/code]

UserManagerImpl

[code]@Transactional(readOnly = true)
public class UserManagerImpl<T, PK extends Serializable> implements UserManager<T, PK> {

  /** DAO genérico usado pelos managers desta classe. */
protected UserDao<T, PK> userDao;

/**
 * Construtor default para instanciação direta através do operador new.
 */
public UserManagerImpl() {
}

/**
 * Construtor que recebe uma referência do DAO para realizar as operações de CRUD junto ao banco. Mantém uma
 * referência para evitar casting do DAO nos métodos dessa classe.
 * 
 * @param genericDao
 *            DAO genérico utilizado nas operações de acesso a base de dados.
 */
public UserManagerImpl(UserDao<T, PK> userDao) {
    this.userDao = userDao;
}

@Override
public T findByLogin(String username) throws DataAccessException {
	return userDao.findByLogin(username);
}

}
[/code]

E no meu applicationContext.xml
meu bean ficou assim

<bean id="userDao" class="br.com.vetoreditora.psiconline..dao.hibernate.UserDaoHibernate"> <property name="sessionFactory" ref="sessionFactory" /> </bean>

Este foi o erro gerado.

14/01/2010 09:54:18 org.apache.catalina.core.StandardContext listenerStart SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customUserDetailsService': Autowiring of fields failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private br.com.vetoreditora.psiconline.dao.UserDao br.com.vetoreditora.psiconline.security.CustomUserDetailsService.userDao; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [br.com.vetoreditora.psiconline..dao.hibernate.UserDaoHibernate] for bean with name 'userDao' defined in URL [file:/C:/Documents%20and%20Settings/doliveira/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/psiconline-web/WEB-INF/classes/META-INF/applicationContext.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: br/com/vetoreditora/psiconline//dao/hibernate/UserDaoHibernate (wrong name: br/com/vetoreditora/psiconline/dao/hibernate/UserDaoHibernate) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessAfterInstantiation(AutowiredAnnotationBeanPostProcessor.java:243) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:959) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) at java.security.AccessController.doPrivileged(Native Method) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380) at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:516) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:578) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private br.com.vetoreditora.psiconline.dao.UserDao br.com.vetoreditora.psiconline.security.CustomUserDetailsService.userDao; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [br.com.vetoreditora.psiconline..dao.hibernate.UserDaoHibernate] for bean with name 'userDao' defined in URL [file:/C:/Documents%20and%20Settings/doliveira/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/psiconline-web/WEB-INF/classes/META-INF/applicationContext.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: br/com/vetoreditora/psiconline//dao/hibernate/UserDaoHibernate (wrong name: br/com/vetoreditora/psiconline/dao/hibernate/UserDaoHibernate) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:435) at org.springframework.beans.factory.annotation.InjectionMetadata.injectFields(InjectionMetadata.java:105) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessAfterInstantiation(AutowiredAnnotationBeanPostProcessor.java:240) ... 31 more Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [br.com.vetoreditora.psiconline..dao.hibernate.UserDaoHibernate] for bean with name 'userDao' defined in URL [file:/C:/Documents%20and%20Settings/doliveira/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/psiconline-web/WEB-INF/classes/META-INF/applicationContext.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: br/com/vetoreditora/psiconline//dao/hibernate/UserDaoHibernate (wrong name: br/com/vetoreditora/psiconline/dao/hibernate/UserDaoHibernate) at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1144) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:524) at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1177) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:222) at org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors(BeanFactoryUtils.java:187) at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:652) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:610) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:412) ... 33 more Caused by: java.lang.NoClassDefFoundError: br/com/vetoreditora/psiconline//dao/hibernate/UserDaoHibernate (wrong name: br/com/vetoreditora/psiconline/dao/hibernate/UserDaoHibernate) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1847) at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:890) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1354) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) at org.springframework.util.ClassUtils.forName(ClassUtils.java:211) at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:385) at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1138) ... 40 more

Apareceu este erro agora:

14/01/2010 09:56:29 org.apache.catalina.core.StandardContext listenerStart SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customUserDetailsService': Autowiring of fields failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private br.com.vetoreditora.psiconline.dao.UserDao br.com.vetoreditora.psiconline.security.CustomUserDetailsService.userDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDao' defined in URL [file:/C:/Documents%20and%20Settings/doliveira/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/psiconline-web/WEB-INF/classes/META-INF/applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.vetoreditora.psiconline.dao.hibernate.UserDaoHibernate]: Constructor threw exception; nested exception is java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessAfterInstantiation(AutowiredAnnotationBeanPostProcessor.java:243) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:959) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) at java.security.AccessController.doPrivileged(Native Method) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380) at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:516) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:578) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private br.com.vetoreditora.psiconline.dao.UserDao br.com.vetoreditora.psiconline.security.CustomUserDetailsService.userDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDao' defined in URL [file:/C:/Documents%20and%20Settings/doliveira/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/psiconline-web/WEB-INF/classes/META-INF/applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.vetoreditora.psiconline.dao.hibernate.UserDaoHibernate]: Constructor threw exception; nested exception is java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:435) at org.springframework.beans.factory.annotation.InjectionMetadata.injectFields(InjectionMetadata.java:105) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessAfterInstantiation(AutowiredAnnotationBeanPostProcessor.java:240) ... 31 more Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDao' defined in URL [file:/C:/Documents%20and%20Settings/doliveira/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/psiconline-web/WEB-INF/classes/META-INF/applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.vetoreditora.psiconline.dao.hibernate.UserDaoHibernate]: Constructor threw exception; nested exception is java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:883) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:839) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) at java.security.AccessController.doPrivileged(Native Method) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:671) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:610) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:412) ... 33 more Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.vetoreditora.psiconline.dao.hibernate.UserDaoHibernate]: Constructor threw exception; nested exception is java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:115) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:877) ... 46 more Caused by: java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType at br.com.vetoreditora.psiconline.dao.hibernate.UserDaoHibernate.<init>(UserDaoHibernate.java:37) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:100) ... 48 more

java.lang.NoClassDefFoundError: br/com/vetoreditora/psiconline

Acho que você precisa aprender a ler os stack traces …
da uma olhada neste post do meu blog.
Mensagens de erro são feias mas não mentem (nem mordem)
Todas as perguntas que tu fez estavam respondidas no stack trace que tu postou, aprender a ler o stack traces vai te poupar muito tempo e te ajudar a resolver muitos outros problemas, não só este …

Urubatan

Muito obrigado pela ajuda !!

Urubatan,

Eu li o seu artigo sobre Stack Trace e achei muito interessante.

Li cada linha do meu stack trace, mas não consegui achar uma solução pro meu problema.

Só pra deixar voce mais a par… Estou implantando Spring Security em minha aplicação.

Você poderia me dar uma ajuda nesse @autowired?

Agradeço desde já pela atenção

Leia novamente o stack trace:
Could not instantiate bean class [br.com.vetoreditora.psiconline.dao.hibernate.UserDaoHibernate]: Constructor threw exception; nested exception is java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType

O problema esta na linha:
persistentClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]

O erro não tem nada a ver com você estar importando o Spring Security, por enquanto o erro tem a ver apenas com você ainda não ter entendido direito como funcionam os generics em java junto com reflection (Generics em java são um lixão, úteis mas a especificação ficou muito porca por que foi a única forma que eles conseguiram pensar de manter a compatibilidade com as versões anteriores)

No meu Dao´s eu nao estou mais usando o “T”…
Eu estou colocando o Usuario.

persistentClass = (Class<Usuario>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];

Mesmo assim continua dando erro.

Urubatan não sei mais o que fazer… mudei tudo q eu sei… se tem alguma coisa a mais pra fazer … eu desconheco…

Se me ajudar… ficarei grato !!

Urubatan

Posso te mandar um arquivo, com as minhas classes Daos?

Obrigado.

nops, thanks :smiley:
mas barbada, é um UsuarioDao, então tira estes esquemas dinâmicos e faz a classe com Usuario.class hardcoded …
não usa reflection onde não precisa :smiley:

E mais uma dica (acho que a última, por hoje pelo menos :smiley: )

persistentClass = (Class&lt;Usuario&gt;) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];

é dificil de depurar

Type genericSuperClass = getClass().getGenericSuperclass();
ParameterizedType parameterizedGenericSuperClass = (ParameterizedType)genericSuperClass;
persistentClass = (Class&lt;Usuario&gt;) parameterizedGenericSuperClass.getActualTypeArguments()[0];

é fácil de depurar e tu vai poder rodar passo a passo para descobrir o que caa método esta retornando.

Mas volto a dizer, este código dentro de uma classe de nome UsuarioDao não faz sentido, tu poderia substituir isto por

persistentClass = Usuario.class;