Cet article démontre l'injection de propriétés telles que INT, String, Array, List, Set, Map, Date, etc.
Parmi eux, l'injection de type de date est réalisée avec l'éditeur d'attribut fourni par Spring. Tout d'abord, les cinq classes d'entités sont utilisées.
package com.jadyer.model; Importer java.util.date; Importer java.util.list; importation java.util.map; import java.util.set; / ** * Injection de propriétés communes * @see Injection de int, chaîne, array, liste, set, carte, date * / classe publique Bean11 {IntValue entier privé; Strvalue de chaîne privée; chaîne privée [] ArrayValue; Liste privée listValue; set privé setValue; map privé mapValue; Date privée DateValue; / * Setter et getter pour sept attributs * /} package com.jadyer.model; Classe publique Bean22 {Private Bean33 Bean33; Private Bean44 Bean4422; // injection: sans pertinence pour le nom d'attribut, mais lié à SetBean44 () Private Bean55 Bean55; / * Setter et getter pour trois attributs * /} package com.jadyer.model; Classe publique Bean33 {ID entier privé; nom de chaîne privé; Sexe à cordes privées; / * Setter et getter pour trois attributs * /} package com.jadyer.model; Classe publique Bean33 {ID entier privé; nom de chaîne privé; Sexe à cordes privées; / * Setter et getter pour trois attributs * /} package com.jadyer.model; Classe publique Bean44 {ID entier privé; nom de chaîne privé; Sexe à cordes privées; Âge entier privé; / * Setter et getter des quatre attributs sont légèrement * /} package com.jadyer.model; Classe publique Bean55 {mot de passe de chaîne privée; / * Le secteur et le getter du mot de passe sont légèrement * /} Ensuite, il y a notre convertisseur de type Java.util.Date personnalisé
package com.jadyer.util; Importer java.beans.propertyEditorsupport; import java.text.parseException; import java.text.simpledateFormat; Importer java.util.date; / ** * Java.util.date Propriété Éditeur. Équivalent à un convertisseur de type. Voici pour convertir la chaîne en type de date * @see ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Éditeurs de propriété personnalisés, vous devez hériter de la classe PropertyEditOrSupport et écraser la méthode setastext () * @see enfin, injectez l'éditeur de propriété personnalisé dans le printemps, puis * @see ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- void setastext (String Text) lève illégalArgumentException {System.out.println ("====== ULILDATEPropertyEditor.Setastext () ==========" + texte); try {date date = new SimpledateFormat (modèle) .Parse (texte); this.setValue (date); // Remarque: ce qui est mis ici est un objet java.util.date, donc le temps de sortie est le format par défaut} catch (parseException e) {e.printStackTrace (); jeter un nouveau IllégalArgumentException (texte); // continue de lancer des exceptions illégales avec des paramètres vers le haut}}} Le fichier applicationContext Beans.xml utilisé pour toutes les classes d'entités
<? 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: aop = "http://www.springframework.org/schema/aop" xmlns: tx = "http://www.springframework.org/schema/tx" xsi: schemalation = "http://www.spring http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd " <! - L'attribut default-pazy-init = "true" est décrit à la ligne 49 de la classe injectiontest.java -> <! - Default-Autowire = "byname ou byType" sont deux façons d'assembler automatiquement les haricots fournis par spri0ng. Pour plus de détails-> <! - ***************************************************************************************************************************************************************************. ********************************************************************************************************************************************************************************************************************. ***************************************************************************************************************************************************************************. ********************************************************************************************************************************************************************************************************************. ***************************************************************************************************************************************************************************. ********************************************************************************************************************************************************************************************************************. ********************************************************************************************************************************************************************************************************************. ********************************************************************************************************************************************************************************************************************. Lors de l'exécution de TesInjejection22 (), la sortie par défaut sera ====== ULDILDATEPROPERTYEDITH.SETASTEXT () ===== 4 juin 2010 -> <! Dans le fichier de configuration et injecter -> <! - L'avantage de cela est que si certaines configurations dans le fichier de configuration de ressort sont mal écrites, il peut être détecté immédiatement -> <! - Le fichier de configuration de Struts1.x n'aura aucun problème si une classe est écrite incorrectement. Ce n'est que lorsqu'il est réellement exécuté -> <! - Pour Spring, vous pouvez également utiliser les attributs pertinents pour retarder l'initialisation du fichier de configuration, c'est-à-dire, default-Lazy-Init = "true" -> <! - c'est-à-dire lorsqu'il est réellement utilisé, accédez au nouvel objet et injectez-le dans l'attribut. Cela implique paresseux, c'est-à-dire l'initialisation de retard -> <! - Modifiez simplement le fichier de configuration de Spring, tel que <Beans XSI: ScheMalation = "http: // www ...." Default-Lazy-init = "true"> -> <! - L'étendue de l'action à l'heure actuelle est le fichier de configuration entier. De même, les attributs paresseux de chaque balise <an bean> peuvent également être configurés séparément -> <! - Mais ce n'est pas défini, mais l'injection est terminée lorsque le beanfactory est créé, ce qui est pratique pour vérifier les erreurs -> <! - ******************************************************************************************************************************************************. Convertir automatiquement en int -> <propriété name = "strvalue" value = "hello_spring" /> <propriété name = "arrayValue"> <sist> </ propriété> </ Value> </ Listvalue "> </ List> </ Value> </value> <value> list> list2 name = "setValue"> <set> <value> set11 </value> <value> set22 </value> </set> </ propriété> <propriété name = "mapValue"> <map> <entrée key = "key11" value = "value11" /> <entrée key = "key22" value = "value22" /> </ map> </ propriété> <propriété = "datevalue" Value = "June 4, 2010 - </ propriété> <! Ici, le format de date doit être le même que la configuration de l'applicationContext-editor.xml -> </Eb> <bean id = "bean22"> <propriété name = "bean33" ref = "bean33" /> <propriété name = "bean44" ref = "bean44" /> <propriété name = "bean55" ref = "bean55" /> </EAN> </EANC Value = "123" /> </bEAN> </EANS>
Le fichier applicationContext-comon.xml utilisé pour les classes d'entités publiques
<? 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: aop = "http://www.springframework.org/schema/aop" xmlns: tx = "http://www.springframework.org/schema/tx" xsi: schemalation = "http://www.spring http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd " Abstract Beans -> <! - Tout d'abord, spécifiez la propriété abstraite de la balise <an Bean> à TRUE, puis spécifiez son parent dans d'autres <fans> -> <bean id = "AbstractBean" Abstract = "true"> <propriété name = "id" value = "2" /> <propriété name = "name" value = "Zhang Qilant" /> <propriété name = "sex" value = "male" /> </ beeb) Parent = "AbstractBean" /> <Bean Id = "Bean44" Parent = "AbstractBean"> <propriété name = "Age" value = "26" /> </Ebring> </ Beans> <! - Les prototypes de Bean33 et Bean44 avant d'utiliser AbstractBean sont les suivants-> <! - <Bean Id = "Bean33"> <propriété Name = "ID" Value = "100" / » Value = "Zhang San" /> <propriété name = "Sex" value = "mâle" /> </ bean> <bean id = "bean44"> <propriété name = "id" value = "100" /> <propriété name = "name" value = "zhang san" /> <propriété name = "sexe" value = "male" /> <propriété name = "Âge" value = "90" /> </ bean> ->
Le fichier applicationContext-editor.xml utilisé pour l'éditeur de propriété java.util.date
<? 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: aop = "http://www.springframework.org/schema/aop" xmlns: tx = "http://www.springframework.org/schema/tx" xsi: schemalation = "http://www.spring http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd "> <BeaHma id = "ULILDATEPROPERTYEDITOR"> <propriété name = "patron" value = "Yyyyy MM Mois DDD" /> </EAN> <! - Vérifiez le code source et constatez qu'une méthode SetCustomEditors est fournie à la ligne 131 de la classe CustomEditorConfigurer, afin que vous puissiez injecter -> <ganique ID = "CustomEditor"> <propriété nom = "CustomEditors"> <maph key = "java.util.date" value-ref = "utildatePropertyEditor" /> </aph> </promider> </ank> </bars> <! - Vous pouvez également utiliser le <an Bean> interne pour rédiger l'accès à l'utilisation, et l'extérieur ne peut pas être utilisé -> <! - Puis Attribut à l'intérieur du <an Bean> -> <! - L'exemple est le suivant-> <! - <bean id = "personnalisé"> <propriété name = "personnalisé"> <map> <entrée key = "java.util.date"> <an bean> <propriété = "motif" value = "yyyyy mm mois ddd day" /> </ean> </eying> </preng> </prenge> </preng> </prenge> </prenge> </preng> </prée> </preneft
Enfin, la classe de test unitaire écrite à l'aide de JUnit3.8
package com.jadyer.junit; Importer Junit.Framework.TestCase; import org.springframework.context.ApplicationContext; import org.springframework.context.support.classPathxmlApplicationContext; import com.jadyer.model.bean11; import com.jadyer.model.bean22; classe publique PropertyInjectionTest étend TestCase {private applicationContext Factory; @Override Protected void setup () lève une exception {/ **** ==== Lire un seul fichier de configuration ==== **** / // factory = new ClassPathXmlApplicationContext ("ApplicationContext.xml"); / **** ==== Lire plusieurs fichiers de configuration à l'aide de Arrays ==== **** / // De cette façon, deux fichiers de configuration seront utilisés comme un, à la surface, comme deux // en fait, en interne comme un, donc dans plusieurs fichiers de configuration, l'ID à l'intérieur ne peut pas être répété // Mais l'attribut de nom peut être répété, tout comme la différence entre le numéro d'identification de la personne et le même nom // String [] configLocations = nouveau = neuf CONFIGLOCATIONS = NEW String [] {"ApplicationContext.xml", "ApplicationContext-Editor.xml"}; // factory = new ClassPathxMlApplicationContext (configLocations); / **** ====== Utilisez le * modèle de correspondance pour lire plusieurs fichiers de configuration ==== **** / // Un dicton populaire dans l'industrie: les conventions sont meilleures que la configuration // Donc, lorsqu'il y a un accord unifié et meilleur, si vous pouvez utiliser les fonctions fournies par le framework pour réduire le montant de la configuration. ClassPathxmlApplicationContext ("ApplicationContext - *. Xml"); } / ** * Cette méthode démontre l'injection d'attributs communs, y compris int, chaîne, tableau, liste, ensemble, carte, injection de date * @see où l'injection du type de date est implémentée à l'aide de l'éditeur de propriété Spring * / public void testiNjection11 () {// bean11 Bean11 = new Bean11 (); // Si vous êtes simple, alors ses attributs ne seront pas injectés. La condition préalable à l'injection doit être retirée du conteneur IOC avant qu'il n'injecte Bean11 Bean11 = (Bean11) Factory.getBean ("Bean11"); // À l'heure actuelle, HEUR11 est obtenu à partir du conteneur IOC, de sorte que ses dépendances seront injectées dans System.out.println ("bean11.intvalue =" + bean11.getIntValue ()); System.out.println ("bean11.strvalue =" + bean11.getstrValue ()); System.out.println ("bean11.arrayvalue =" + bean11.getArrayValue ()); System.out.println ("bean11.listValue =" + bean11.getListValue ()); System.out.println ("bean11.setValue =" + bean11.getSetValue ()); System.out.println ("bean11.mapValue =" + bean11.getMapValue ()); System.out.println ("bean11.dateValue =" + Bean11.getDateValue ()); } / ** * Cette méthode démontre principalement l'abstraction des configurations publiques pour réduire la quantité de configuration * / public void TesInINDIGGHIE22 () {bean22 bean22 = (bean22) factory.getBean ("bean22"); System.out.println ("bean22.bean33.id =" + bean22.getBean33 (). GetID ()); System.out.println ("bean22.bean33.name =" + bean22.getBean33 (). GetName ()); System.out.println ("bean22.bean33.sex =" + bean22.getBean33 (). GetSex ()); System.out.println ("bean22.bean44.id =" + bean22.getBean44 (). GetID ()); System.out.println ("bean22.bean44.name =" + bean22.getBean44 (). GetName ()); System.out.println ("bean22.bean44.sex =" + bean22.getBean44 (). GetSex ()); System.out.println ("bean22.bean44.age =" + bean22.getBean44 (). Getage ()); System.out.println ("bean22.bean55.password =" + bean22.getBean55 (). GetPassword ()); }}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.