Spring não faz cria bean

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:

package br.com.odontonew.helper;

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

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

import br.com.odontonew.bean.Lov;
import br.com.odontonew.dao.BasicDAO;

@Component
public class LovHelper {
	
	@Autowired
	private BasicDAO dao;
	
	private static LovHelper instance;
	
	
	private LovHelper(){
		
	}
	
	public static LovHelper getInstance(){
		if (instance == null)
			instance = new LovHelper();
		
		return instance;
	}
	

	public Lov getLovByCodigo(Class lovClass, String codigo){
		Map<String,Object> map = new HashMap<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)
			return lovs.get(0);
		else
			return null;
	}

	
	/*Getters and Setters*/
	public BasicDAO getDao() {
		return dao;
	}

	public void setDao(BasicDAO dao) {
		this.dao = dao;
	}

}

E como está o BasicDAO?

Segue meu BasicDAOImpl, pois o BasicDAO é só a interface:

package br.com.odontonew.dao;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.apache.commons.logging.LogFactory;
import org.apache.log4j.Logger;
import org.primefaces.component.log.Log;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import br.com.odontonew.bean.AbstractBean;
import br.com.odontonew.exception.BOException;

@Repository("basicDAO")
public class BasicDAOImpl implements BasicDAO {

	@PersistenceContext
	protected EntityManager entityManager;

	private Logger logger = Logger.getLogger(BasicDAOImpl.class);

	@Transactional(readOnly = true)
	public List<? extends AbstractBean> findByNamedQuery(String namedQuery,
			Map<String, Object> namedParams) {
		try {

			if (logger.isDebugEnabled())
				logger.debug("Procurando pela namedQuery " + namedQuery
						+ " com " + namedParams.size() + " parametros");

			Query query = entityManager.createNamedQuery(namedQuery);

			if (namedParams != null) {
				Iterator it = namedParams.entrySet().iterator();

				while (it.hasNext()) {
					Map.Entry<String, Object> mapEntry = (Map.Entry<String, Object>) it
							.next();
					query.setParameter(mapEntry.getKey(), mapEntry.getValue());
				}
			}

			return query.getResultList();

		} catch (Exception e) {
			e.printStackTrace();
			logger.error("Ocorreu um erro ao procurar por uma Named Query. MSG ORIGINAL: "
					+ e.getMessage());
			throw new BOException(
					"Ocorreu um erro ao procurar por uma Named Query");
		}
	}

	@Transactional(readOnly = true)
	public List<? extends AbstractBean> findByNamedQuery(String namedQuery) {
		try {
			if (logger.isDebugEnabled())
				logger.debug("Procurando pela namedQuery " + namedQuery
						+ " sem nenhum parametro");
			Query query = entityManager.createNamedQuery(namedQuery);
			return query.getResultList();
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("Ocorreu um erro ao procurar por uma Named Query. MSG ORIGINAL: "
					+ e.getMessage());
			throw new BOException(
					"Ocorreu um erro ao procurar por uma Named Query");
		}
	}
	
	@Transactional(readOnly = true)
	public List<? extends AbstractBean> findByQuery(String hql, Map<String, Object> namedParams) {
		try {
			if (logger.isDebugEnabled())
				logger.debug("Procurando pela query: " + hql);
			Query query = entityManager.createQuery(hql);
			
			if (namedParams != null) {
				Iterator it = namedParams.entrySet().iterator();

				while (it.hasNext()) {
					Map.Entry<String, Object> mapEntry = (Map.Entry<String, Object>) it
							.next();
					query.setParameter(mapEntry.getKey(), mapEntry.getValue());
				}
			}
			
			return query.getResultList();	
			
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("Ocorreu um erro ao procurar por uma Query. MSG ORIGINAL: "
					+ e.getMessage());
			throw new BOException(
					"Ocorreu um erro ao procurar por uma Query");
		}
	}
	

	@Transactional
	public AbstractBean save(AbstractBean bean) {
		try {
			if (logger.isDebugEnabled())
				logger.debug("Salvando Bean " + bean.getClass().getName());

			entityManager.persist(bean);
			return bean;
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("Ocorreu um erro ao procurar por uma Named Query. MSG ORIGINAL: "
					+ e.getMessage());
			throw new BOException(
					"Ocorreu um erro ao procurar por uma Named Query");
		}
	}

	@Transactional
	public void update(AbstractBean bean) {
		try {
			if (logger.isDebugEnabled())
				logger.debug("Alterando Bean " + bean.getClass().getName());
			entityManager.merge(bean);
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("Ocorreu um erro ao procurar por uma Named Query. MSG ORIGINAL: "
					+ e.getMessage());
			throw new BOException(
					"Ocorreu um erro ao procurar por uma Named Query");
		}
	}

	@Transactional
	public void delete(AbstractBean bean) {
		try {
			if (logger.isDebugEnabled())
				logger.debug("Deletando Bean " + bean.getClass().getName());
			entityManager.remove(bean);
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("Ocorreu um erro ao procurar por uma Named Query. MSG ORIGINAL: "
					+ e.getMessage());
			throw new BOException(
					"Ocorreu um erro ao procurar por uma Named Query");
		}
	}

	/* Spring Definition */

	public EntityManager getEntityManager() {
		return entityManager;
	}

	public void setEntityManager(EntityManager entityManager) {
		this.entityManager = entityManager;
	}

}