Bom, estou trabalhando com Spring para injeção de dependência e ele funciona normalmente apenas para 2 classes: BasicBOImpl e BasicDAOImpl. Qualquer outra que eu crie (mesmo que faça igualzinho, os beans ficam como null). Criei a classe abaixo e o atributo dao sempre fica null trazendo um NullPointerException:
packagebr.com.odontonew.helper;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Component;importbr.com.odontonew.bean.Lov;importbr.com.odontonew.dao.BasicDAO;@ComponentpublicclassLovHelper{@AutowiredprivateBasicDAOdao;privatestaticLovHelperinstance;privateLovHelper(){}publicstaticLovHelpergetInstance(){if(instance==null)instance=newLovHelper();returninstance;}publicLovgetLovByCodigo(ClasslovClass,Stringcodigo){Map<String,Object>map=newHashMap<String,Object>();map.put("codigo",codigo);List<Lov>lovs=(List<Lov>)dao.findByQuery("SELECT c FROM "+lovClass.getName()+" c WHERE c.codigo = :codigo",map);if(lovs.size()==1)returnlovs.get(0);elsereturnnull;}/*Getters and Setters*/publicBasicDAOgetDao(){returndao;}publicvoidsetDao(BasicDAOdao){this.dao=dao;}}
Segue meu BasicDAOImpl, pois o BasicDAO é só a interface:
packagebr.com.odontonew.dao;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importjavax.persistence.EntityManager;importjavax.persistence.PersistenceContext;importjavax.persistence.Query;importorg.apache.commons.logging.LogFactory;importorg.apache.log4j.Logger;importorg.primefaces.component.log.Log;importorg.springframework.stereotype.Repository;importorg.springframework.transaction.annotation.Propagation;importorg.springframework.transaction.annotation.Transactional;importbr.com.odontonew.bean.AbstractBean;importbr.com.odontonew.exception.BOException;@Repository("basicDAO")publicclassBasicDAOImplimplementsBasicDAO{@PersistenceContextprotectedEntityManagerentityManager;privateLoggerlogger=Logger.getLogger(BasicDAOImpl.class);@Transactional(readOnly=true)publicList<?extendsAbstractBean>findByNamedQuery(StringnamedQuery,Map<String,Object>namedParams){try{if(logger.isDebugEnabled())logger.debug("Procurando pela namedQuery "+namedQuery+" com "+namedParams.size()+" parametros");Queryquery=entityManager.createNamedQuery(namedQuery);if(namedParams!=null){Iteratorit=namedParams.entrySet().iterator();while(it.hasNext()){Map.Entry<String,Object>mapEntry=(Map.Entry<String,Object>)it.next();query.setParameter(mapEntry.getKey(),mapEntry.getValue());}}returnquery.getResultList();}catch(Exceptione){e.printStackTrace();logger.error("Ocorreu um erro ao procurar por uma Named Query. MSG ORIGINAL: "+e.getMessage());thrownewBOException("Ocorreu um erro ao procurar por uma Named Query");}}@Transactional(readOnly=true)publicList<?extendsAbstractBean>findByNamedQuery(StringnamedQuery){try{if(logger.isDebugEnabled())logger.debug("Procurando pela namedQuery "+namedQuery+" sem nenhum parametro");Queryquery=entityManager.createNamedQuery(namedQuery);returnquery.getResultList();}catch(Exceptione){e.printStackTrace();logger.error("Ocorreu um erro ao procurar por uma Named Query. MSG ORIGINAL: "+e.getMessage());thrownewBOException("Ocorreu um erro ao procurar por uma Named Query");}}@Transactional(readOnly=true)publicList<?extendsAbstractBean>findByQuery(Stringhql,Map<String,Object>namedParams){try{if(logger.isDebugEnabled())logger.debug("Procurando pela query: "+hql);Queryquery=entityManager.createQuery(hql);if(namedParams!=null){Iteratorit=namedParams.entrySet().iterator();while(it.hasNext()){Map.Entry<String,Object>mapEntry=(Map.Entry<String,Object>)it.next();query.setParameter(mapEntry.getKey(),mapEntry.getValue());}}returnquery.getResultList();}catch(Exceptione){e.printStackTrace();logger.error("Ocorreu um erro ao procurar por uma Query. MSG ORIGINAL: "+e.getMessage());thrownewBOException("Ocorreu um erro ao procurar por uma Query");}}@TransactionalpublicAbstractBeansave(AbstractBeanbean){try{if(logger.isDebugEnabled())logger.debug("Salvando Bean "+bean.getClass().getName());entityManager.persist(bean);returnbean;}catch(Exceptione){e.printStackTrace();logger.error("Ocorreu um erro ao procurar por uma Named Query. MSG ORIGINAL: "+e.getMessage());thrownewBOException("Ocorreu um erro ao procurar por uma Named Query");}}@Transactionalpublicvoidupdate(AbstractBeanbean){try{if(logger.isDebugEnabled())logger.debug("Alterando Bean "+bean.getClass().getName());entityManager.merge(bean);}catch(Exceptione){e.printStackTrace();logger.error("Ocorreu um erro ao procurar por uma Named Query. MSG ORIGINAL: "+e.getMessage());thrownewBOException("Ocorreu um erro ao procurar por uma Named Query");}}@Transactionalpublicvoiddelete(AbstractBeanbean){try{if(logger.isDebugEnabled())logger.debug("Deletando Bean "+bean.getClass().getName());entityManager.remove(bean);}catch(Exceptione){e.printStackTrace();logger.error("Ocorreu um erro ao procurar por uma Named Query. MSG ORIGINAL: "+e.getMessage());thrownewBOException("Ocorreu um erro ao procurar por uma Named Query");}}/* Spring Definition */publicEntityManagergetEntityManager(){returnentityManager;}publicvoidsetEntityManager(EntityManagerentityManager){this.entityManager=entityManager;}}