Isso acontece porquê em tempo de execução o Spring não consegue resolver os tipos genéricos : <T, Long> … ele está procurando por alguem que resolva GenericDAO apenas, e como acha dois candidatos, estoura exceção. Com o @Qualifier você resolveria este problema colocando implicitamente o nome do bean, mas, isso quase sempre me cheira gambiarra hehe 
Você teria que fazer alguma interface de especializacao, algo como:
interface UsuarioDAO extends GenericDAO<Usuario, Long> { }
@Repository
public class UsuarioDAOImpl extends GenericDAOImpl<Usuario, Long> implements UsuarioDAO {
}
depois, no seu controller:
public abstract class GenericController<B extends Serializable, DAO extends GenericDAO<B, ?>> {
@Autowired
private DAO dao;
}
…
Mas, lembrando que quanto mais generics você usar, mas sujo as camadas generics abaixo podem ficar :?
Eu tenho uma app/arquitetura que to fazendo pra brincar, que tem Controller / Model / DAO generico, de uma aqui (https://github.com/wryel/springmvc-tiles-jpa/), quem sabe a gente não pode discutir algumas ideias.
edit:
dao generico: https://github.com/wryel/springmvc-tiles-jpa/blob/master/springmvc-tiles-jpa-core/src/main/java/br/com/wryel/dao/impl/GenericJPADAOImpl.java
model generic: (business generico): https://github.com/wryel/springmvc-tiles-jpa/blob/master/springmvc-tiles-jpa-core/src/main/java/br/com/wryel/model/impl/GenericModelImpl.java
exemplo de uso de controller generico: https://github.com/wryel/springmvc-tiles-jpa/blob/master/springmvc-tiles-jpa-web/src/main/java/br/com/wryel/controller/UsuarioController.java
Essa minha mania de passar alguns tipos no contrutor, é para não ter que ficar marcando aqueles chatos supresswarning
(dava para recuperar os tipos pelo genericSuperClass(), mais ai vai a questão de gosto)
[]'s