IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

@Autowired : ne marche pas sur une classe mais fonctionne avec un setter [Framework]


Sujet :

Spring Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Points : 64
    Points
    64
    Par défaut @Autowired : ne marche pas sur une classe mais fonctionne avec un setter
    Bon, je m'arrache un peu les cheveux car je ne comprends pas ce que j'oublie.

    J'utilise Spring et Spring MVC avec Jetty.
    Je souhaite utiliser l'annotation Autowired pour charger un service dans un controller.


    Lorsque je lance Jetty, j'ai une erreur sur le champ que j'essaie d'autowire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Embedded error: Error creating bean with name 'loggedInPageController': Autowiring of fields failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private bla.bla.bla.business.SecurityService bla.bla.bla.web.LoggedInPageController.securityService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [bla.bla.bla.business.SecurityService] is defined: Unsatisfied dependency of type [interface bla.bla.bla.business.SecurityService]: expected at least 1 matching bean
    L'application-context.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?xml version="1.0" encoding="UTF-8"?>
     
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
     
    	<context:annotation-config />
    	<context:component-scan base-package="bla.bla.bla.*"/>
    ...
    </beans>

    Ca fonctionne quand je fais de l'autowired entre une classe de la couche DAO et ma sessionFactory d'hibernate.
    Ca fonctionne aussi pour une classe de service et la classe de la DAO appelée.
    Mais ça ne marche pas entre une classe Controller et une classe de Service. J'ai aussi essayé pour voir Controller avec DAO et ça ne marche pas.

    Le controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    @Controller
    @RequestMapping("/loggedin.html")
    public class LoggedInPageController {
     
    	@Autowired
    	private SecurityService securityService;
     
    	@RequestMapping(method = RequestMethod.GET)
    	public String authenticate(String login, String password, ModelMap model) {
    		User user = securityService.authenticate(login, password);
    		model.addAttribute(user);
    		return "loggedIn";
    	}
     
     
     
    }
    Le service en question
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Service("securityService")
    public class SecurityServiceImpl implements SecurityService {
    @Autowired
    	private SecurityDao securityDao;
     
    	public User authenticate(String login, String password) {
    		return securityDao.authenticate(login, password);
    	}
    }
    J'ai essayé sans annotation en rajoutant un setter sur le service dans mon Controller et ça dans l'app context et ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    bean id="securityDao" class="bla.bla.bla.dao.SecurityDaoImpl">
    		<property name="sessionFactory" ref="mySessionFactory"/>
    	</bean>
     
    	<bean id="securityService" class="bla.bla.bla.business.SecurityServiceImpl">
    		<property name="securityDao" ref="securityDao"></property>
    	</bean>
     
    	<bean id="loggedInPageController" class="bla.bla.bla.web.LoggedInPageController">
    		<property name="securityService" ref="securityService"/>
    	</bean>
    Alors qu'est ce que j'oublie avec le autowired du controller ??

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Points : 64
    Points
    64
    Par défaut
    Bon j'ai résolu mon problème : j'utilise spring-mvc et du coup j'avais un application-servlet.xml dans lequel je déclarais le package contenant mes controllers pour les annotations.

    Or je fais appel à des services dans ces controllers et je n'avais pas mis <context:annotation-config />.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Dojo] Affichage du menu ça marche pas sur une grid
    Par hasnaa1988 dans le forum Bibliothèques & Frameworks
    Réponses: 6
    Dernier message: 12/03/2010, 11h43
  2. Executable C# ne marche pas sur une autre machine
    Par clakinette dans le forum C#
    Réponses: 10
    Dernier message: 25/01/2010, 22h33
  3. [Dojo] push ca marche pas sur une variable de classe ?
    Par Zineb1987_UNI dans le forum Bibliothèques & Frameworks
    Réponses: 11
    Dernier message: 14/12/2009, 10h12
  4. Réponses: 8
    Dernier message: 23/06/2007, 10h38
  5. DATEDIFF() qui ne marche pas sur une version 5.0.xx
    Par vallica dans le forum Requêtes
    Réponses: 4
    Dernier message: 10/05/2006, 17h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo