SPRING et les objets

Fermé
xflamant - 7 févr. 2008 à 18:56
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 - 2 juin 2008 à 21:31
Bonjour,
Bonjour,
Je suis en train d’étudier Spring en tant que conteneur léger qui permet d’instancier les objets d’une application et injecter les dépendance. Je me pose plusieurs questions sur ce sujet. Les voici :
QUESTION1 :
Voici un bean :
Public class UnBean {
    Private String chaine ;
    Private int entier;
    Public UnBean(String chaine, int entier) {
        This.chaine=chaine;
        This.entier = entire;
    }
    (….)
}

Pour que Spring le gère avec l’injection des propriétés, il suffit de déclarer cet objet dans le fichier applicationContext.xml de la facon suivante :
<bean id= monBean class=UnBean>
    <property name=chaine value=valeur/>
    <property name=entier value=10/>
</bean>

Ma question est la suivante : comment dans une classe instancier un objet UnBean ?
Normalement on ferait : UnBean B = new UnBean(valeur,10) ; mais comment gérer ceci avec Spring et surtout qu’est-ce que Spring apporte de plus par rapport à la méthode habituelle (UnBean B = new UnBean(valeur,10) )?

QUESTION2 :
D’autre part il semblerait que dans le fichier XML on déclare un bean particulier (Le bean monBean avec pour attribut valeur et 10) . Que se passe t-il si l’on veut un bean monBean avec comme attibut autre_valeur et 5 ? Serait-on obligé de le déclarer dans le fichier XML ? Si c’est le cas, cela me semble vraiment lourd. Je n’arrive pas à voir l’intérêt de Spring à ce sujet et pourtant Spring est utilisé par presque tout le monde, donc c’est moi qui ne voit pas bien.
Est-ce que quelqu’un peut m’expliquer comment ca se passe et quel est l’avantage de Spring? Merci d’avance.
NB : la question se pose de la même manière avec un attribut représentant une autre classe, par exemple l’attribut A a ; A étant une classe (public class A {….})

2 réponses

Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 329
2 juin 2008 à 21:31
Bonsoir
Question 1:
N'oublie pas tes setters dans ta classe. Sinon pour l'instanciation, samy27 t'a répondu.
Pour ce que Spring apporte de plus, j'en parlerai dans la question 2 ;)

Question 2:
Effectivement, tu dois déclarer un autre bean dans ton applicationContext.xml.
Ce n'est pas si lourd que ça finalement, parce que Spring est conçu pour développer des applis web, et qu'en général, tu n'as pas de bean prenant des paramètres si spécifiques.
Genre tu as un bean factory, des dao pour accéder à tes bases de données, qui ne prennent que la factory en property, puis tes classes objets et/ou services qui sont déclarées, et qui prennent tes beans précédemment définis en property.

Spring est un framework très vaste qui peut faire plein de trucs (l'injection de dépendances, c'est juste un module de Spring, mais il y a aussi la réalisation du pattern MVC, la programmation par aspects...).
Pour bien comprendre l'injection de dépendances, je te conseille la lecture de cet article :
https://martinfowler.com/articles/injection.html

Personnellement, j'ajouterai l'exemple suivant :
Imagine que tu manipules tous tes objets par des interfaces. Tu as donc beaucoup de fois dans ta classe du code ressemblant à ça :
MonInterface inter = new Implementation();

L'un des avantages de l'injection de dépendances, c'est de pouvoir ignorer totalement l'implémentation de ton interface (c'est un peu de la programmation par contrat). Tu déclares donc ton interface dans ta classe, et tu fournis son implémentation dans ton applicationContext. Ainsi, si un jour tu décides de créer une autre classe implémentant ton interface, tu modifies simplement la définition du bean dans ton applicationContext, tu n'as pas besoin de recompiler et de relivrer les binaires, et tes modifications sont totalement transparentes.

J'espère t'avoir éclairé un peu.
2
samy27 Messages postés 2 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 2 juin 2008
2 juin 2008 à 17:23
Spring IoC va nous permettre de créer une application 3tier où les couches sont indépendantes des autres, c.a.d. que changer l'une ne nécessite pas de changer les autres, apporte une grande souplesse dans l'évolution de l'application.

Pour instancier les objets:
apres bien evidement fait le necéssaire sur le classpath (ajouter les .jar qu'il fo :-)) ):

// exploitation fichier de configuration spring
final XmlBeanFactory bf = new XmlBeanFactory(new ClassPathResource("spring.xml"));
// récupération du bean [personne1]
UnBean personne1 = (UnBean) bf.getBean("monbean");
0