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 :

spring et l'annotation @autowired


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 113
    Par défaut spring et l'annotation @autowired
    Bonjour,

    Quelqu'un saurait-il m'expliquer l'annotation @autowired sur un champ et la relation avec Spring ?

    Est-ce vrai qu'une fois qu'on précède un champ avec cette annotation dans une classe, on doit le définir dans l'applicationContext de Spring ?

    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Cette annotation te permet de spécifier une variable d'instance à renseigner par Spring. Cette annotation n'a de sens que dans un bean Spring. La recherche se fait sur le type de la variable.

    Tu n'as pas besoin de les déclarer comme "property", mais tu dois par contre déclarer dans Spring le bean qui devra être injecté.

  3. #3
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Citation Envoyé par Baptiste Wicht Voir le message
    Tu n'as pas besoin de les déclarer comme "property", mais tu dois par contre déclarer dans Spring le bean qui devra être injecté.
    Ainsi que le bean avec le champ @autowired et activer la configuration par annotations de spring

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 13
    Par défaut
    Oui le nom de ton attribut doit avoir le même nom que le bean qui se trouve dans applicationContext.xml

    exemple dans la classe

    @autowired
    Moninterface monbean


    dans le fichier applicationContext.xml
    <bean id="monBean" class="blaba.blabla.MonClass" />

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Développeur Java
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Par défaut
    Bonjour,

    Alors si je comprends bien, l'autowired est le fait de "dire" à Spring qu'une instance d'un objet dans un bean1 peut être recherchée dans une autre instance d'un bean 2 ?

    J'avoue n'avoir jamais manipulé cette annotation, qui n'a pas l'air simple à manipuler...

    Merci.

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 136
    Par défaut
    le @autowired permet de récupéré automatiquement un bean de spring.

    tu as une class Toto implementant Itoto
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class Toto implements Itoto {
     
     @override
     public void methodeToto() {
        //truc ici
     }
    }
    tu as une class titi qui a besoin de d'une implémentation de Itoto.

    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
    18
    19
     
    public class Titi implements Ititi {
     
    private Itoto totoService;
     
     public titi( ){
     
    }
     
    @autowired
    public void setToto( Itoto toto){
     this.totoService = toto;
    }
     
     @override
     public void methodeTiti() {
       totoService.methodeToto();
     }
    }
    tu declarre dans ton xml ( ou en java config ) tes 2 bean spring.
    ( tu doit mettre chemin complet : package.class )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <bean id="toto" class="toto"></bean>
    <bean class="titi"></bean>
    Si tu regarde a aucun moment on dit d’appeler le setter setToto.
    le Autowired sert a çà, spring regarde ta classe voit que tu as un autowired et regarde dans sa base de bean si un bean correspond a cette interface et le met dedans si il trouve.

    La je l'ai fait via un setter, on peut mettre le autowired directement sur l'attribut ( spring le mettant dedans via introspection ).
    on peut mettre l'autowired sur un constructeur( ce que je fait habitude), la spring cherchera tous les bean en paramètre du constructeur).


    Après, tu as plusieurs subtilité si tu as plusieurs bean avec la même interface, tu peut en déclarer un "primary" en XML.
    Si tu veux spécifier un bean spécifiquement par son nom, tu as l'annotation @Qualifier.

    Le gros avantage de ceci est que tu ne fonctionne que par interface, tu ne créer pas de dépendance entre les classe, si un jour tu récupère par un jar la class impementant Itoto et que tu supprime ta propre implémentation, tu as juste a modifier ton XML, spring et l'autowired se chargeant de mettre le nouveau bean comme il faut ton implémentation de titi.

Discussions similaires

  1. [Framework] Spring 3.0 Annotation
    Par Nidhalios dans le forum Spring
    Réponses: 1
    Dernier message: 17/01/2013, 14h09
  2. [Framework] Problème avec l'annotation Autowired
    Par riadhhwajdii dans le forum Spring
    Réponses: 5
    Dernier message: 17/02/2012, 20h39
  3. [MVC] Problème avec l'annotation @Autowired dans le @Controller
    Par rolandl dans le forum Spring Web
    Réponses: 0
    Dernier message: 31/12/2011, 02h18
  4. [Framework] [Spring annotation] @Autowired sur prop hérité
    Par obiflo dans le forum Spring
    Réponses: 2
    Dernier message: 11/03/2011, 08h41
  5. [Data] transaction + spring 2.5 + annotations
    Par zorro13 dans le forum Spring
    Réponses: 1
    Dernier message: 28/11/2008, 12h28

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