Spring não injeta interfaces

7 respostas
painkiller

Boa noite galera, to com um probleminha cruel aqui… já tentei de tudo e não sei como resolver… é o seguinte:

Na minha aplicação aqui, nada do que é interface ou classe abstrata o spring consegue injetar… e aí estou tentando injetar o AuthenticationManager do Spring Security e não está dando… da o erro

org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.security.authentication.AuthenticationManager br.com.extremesys.vanaheim.service.AuthenticationService.authenticationManager; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.springframework.security.authentication.AuthenticationManager] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=org.springframework.security.authentication.AuthenticationManager)}

eu percebi que ele não injeta interfaces tb porque eu tinha uma classe X que era um @Component que implementava uma interface Y, e ele não conseguiu fazer isso… eu imaginei que fosse porque interfaces não podem ser instanciadas, mas não sei se é isso porque no exemplo do Spring Security que estou me baseando, da devMedia, eles injetam a interface AuthenticationManager numa boa…

Será que alguém poderia me ajudar??? Desde já agradeço!!

7 Respostas

romarcio

Deve ter coisa errado na sua configuração. A base da DI é o trabalho com interfaces e o Spring faz muito bem esse trabalho.

Veja nesse tutoria Spring MVC ? 100% livre de XML que a interface IUserDao é injetada na classe UserService. E UserService, que não é uma interface, é injetada na classe UserController.

painkiller

Obrigado por responder, amigo. Pois é, eu já tinha visto outros exemplos como esse… só que aqui na minha aplicação não está dando certo… O erro diz que a classe(abstract/interface) não pode ser injetada… Minhas configurações estão normais, como as que são necessárias… estou mapeando as classes através do component scan no applicationContext. Não faço a mínima ideia do que seja isso, tem alguma sugestão, meu brother?

romarcio

Tenta começar o projeto do zero novamente. Ou revise suas bibliotecas, talvez tenha algum conflito de versões.

painkiller

Bacana mestre, vou dar uma revisada quando chegar em casa!! Obrigado!!

romarcio

Sobre a bibliotecas, o legal é usar o Maven, porque ele baixa as dependências corretas para cada biblioteca da versão do Spring que você ta usando.

painkiller

Pois é, eu estou usando o Maven mesmo… o engraçado é isso. Estou usando, Maven, Spring, JSF, Primefaces e Hibernate. Vou passar um pente fino hoje, quando chegar em casa, mas a priori não pareço ter esquecido de algo.

painkiller

Poxa, testei de novo e deu a mesma coisa… inclusive se eu tentar fazer um DAO genérico por exemplo, não consigo fazer através de uma interface, porque a classe que implementar esse DAO não poderá ser componentizada pelo Spring por conta disso aí… ta muito estranho isso.

Criado 20 de janeiro de 2013
Ultima resposta 22 de jan. de 2013
Respostas 7
Participantes 2