..
Maintenant, nous allons voir, par exemple, comment utiliser le constructeur Dependency Injection
Nous créons nos haricots qui dépend d'un service générique:
forfait it.mrwebmaster.di.constructor;
public class Bean {
GenericService GenericService privé;
beanName chaîne privée;
/ **
* Constructeur
* @ Param genericService
* @ Param beanName
* /
publique Bean (GenericService genericService, String beanName) {
super ();
this.genericService = genericService;
this.beanName = beanName;
}
/ **
* Méthode publique
* /
obole public void () {
System.out.println (beanName + "faire quelque chose»);
genericService.dosomething ();
}
}
configurer la dépendance nell'applicationContext. xml
<bean id="genericService" class="it.mrwebmaster.di.constructor.GenericServiceImpl" scope="singleton" /> <bean id="constructorBean" class="it.mrwebmaster.di.constructor.bean"> <constructor-arg value="beanName"/> <constructor-arg ref="genericService"/> </ Bean>
Comme on peut le voir dans l'exemple d'utiliser l'injection de dépendances constructeur doit utiliser le constructeur tag-arg en utilisant les attributs ref ou la valeur. Le ATTIBASSI ref besoin de passer en arg déjà instancié nell'IoC autre récipient à grains, tandis que l'attribut de valeur est utilisée pour transmettre des valeurs par défaut comme des chaînes ou des nombres.
Dans l'exemple du constructeur de la classe accepte en entrée un haricot GenericService et une chaîne, mais l'exemple qu'il voulait renverser l'ordre des arguments pour montrer comment printemps combinant les arguments par leur type.
Ce type de comportement est très bien quand tous les arguments sont de différents types, mais comment pouvons-nous préciser l'ordre si les arguments sont du même type?
Tag arg constructeur fournit l'attribut-index qui indique l'ordre au printemps avec laquelle passer des paramètres.
<bean id="constructorBean" class="it.mrwebmaster.di.constructor.bean"> <constructor-arg value="beanName" index="1" /> <constructor-arg ref="genericService" index="0" /> </ Bean>
Un autre cas pourrait être ambiguë dans laquelle le construttore accepte en entrée deux paramètres qui peuvent tous deux être représenté par une chaîne, par exemple:
publique Bean (GenericService genericService, String beanName, invocationTimes Integer) {
super ();
this.genericService = genericService;
this.beanName = beanName;
this.invocationTimes = invocationTimes;
}
et nell'applicationContext. xml
<bean id="constructorBean2" class="it.mrwebmaster.di.constructor.bean"> <constructor-arg value="0" /> <constructor-arg value="beanName" /> <constructor-arg ref="genericService" /> </ Bean>Dans ce cas, le printemps de l'erreur comme "0" peut être soit une chaîne ou un nombre. Pour résoudre ce problème, utiliser l'index ou attriburo l'attribut type comme ceci:
<bean id="constructorBean2" class="it.mrwebmaster.di.constructor.bean"> <constructor-arg type="java.lang.Integer" value="0" /> <constructor-arg value="beanName" type="java.lang.String" /> <constructor-arg ref="genericService" /> </ Bean>
L'attribut-arg constructeur peut également être utilisé pour passer des paramètres à la méthode de fabrique:
public static haricots createBean (GenericService genericService, String beanName, invocationTimes Integer) {
Bean b = new Bean (genericService, beanName, invocationTimes);
/ / Ne somethig .......
b return;
}
nell'applicationContext. xml
<bean id="constructorBean3" class="it.mrwebmaster.di.constructor.bean" factory-method="createBean"> <constructor-arg type="java.lang.Integer" value="0" /> <constructor-arg value="beanName" type="java.lang.String" /> <constructor-arg ref="genericService" /> </ Bean>
| |
Linux (Cours)
Guide complet de système open-source. A partir de 49 €. |
| |
PHP (cours)
Cours complet pour la création de sites Web dynamiques. A partir de 49 €. |
| |
Ruby et Ruby on Rails (Cours)
Créer des applications logicielles et Web avec Ruby et RoR. A partir de 39 €. |