SPRING et les objets
xflamant
-
Marco la baraque Messages postés 1030 Statut Contributeur -
Marco la baraque Messages postés 1030 Statut Contributeur -
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 :
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 :
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 {….})
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
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 :
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.
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.
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");
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");