Este artículo demuestra la inyección de propiedades como int, string, matriz, lista, conjunto, mapa, fecha, etc.
Entre ellos, la inyección del tipo de fecha se logra con el editor de atributos proporcionado por Spring. Primero, se utilizan las cinco clases de entidad.
paquete com.jadyer.model; import java.util.date; import java.util.list; import java.util.map; import java.util.set; / *** inyección de propiedades comunes* @see inyección de int, string, matriz, list, set, map, date*/ public class Bean11 {private Integer intValue; cadena privada Strvalue; cadena privada [] ArrayValue; Lista de lista privada Value; set private setValue; Mapa privado MapValue; Fecha privada Fecha de valor; / * Setter y getter para siete atributos */} paquete com.jadyer.model; clase pública Bean22 {private Bean33 Bean33; Bean44 privado Bean4422; // inyección: irrelevante al nombre del atributo, pero relacionado con setBean44 () bean55 private bean55; / * Setter y getter para tres atributos */} paquete com.jadyer.model; clase pública Bean33 {ID de entero privado; nombre de cadena privada; sexo de cuerda privada; / * Setter y getter para tres atributos */} paquete com.jadyer.model; clase pública Bean33 {ID de entero privado; nombre de cadena privada; sexo de cuerda privada; / * Setter y getter para tres atributos */} paquete com.jadyer.model; clase pública Bean44 {ID de entero privado; nombre de cadena privada; sexo de cuerda privada; edad de entero privado; /* Setter y getter de los cuatro atributos son ligeramente*/} paquete com.jadyer.model; Public Class Bean55 {contraseña de cadena privada; /* Setter y getter de la contraseña son ligeramente*/} Luego está nuestro convertidor de tipo java.util.util.
paquete com.jadyer.util; import java.beans.propertyEditorsupport; import java.text.parseException; import java.text.simpledateFormat; import java.util.date; /*** Java.util.Date Propiedad Editor. Equivalente a un convertidor de tipo. Aquí es para convertir la cadena hasta la fecha tipo * @see --------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------- Cosas del editor de propiedades personalizadas, debe heredar la clase PropertyEditorSupport y sobrescribir el método setastext () * @see finalmente, inyectar el editor de propiedades personalizadas en Spring y luego * @see ----------------------------------------------------------------------------------------------------------------------------------------------------------- void setastext (texto de cadena) arroja ilegalArgumentException {System.out.println ("======= UDILDATEPROPERTYEDIter.Setastext () ==========" + Text); intente {date date = new SimpleDateFormat (patrón) .Parse (texto); this.setValue (fecha); // NOTA: Lo que se presenta aquí es un objeto java.util.date, por lo que el tiempo de salida es el formato predeterminado} Catch (ParseException e) {E.PrintStackTrace (); tirar nueva ilegalargumentException (texto); // Continuar lanzando excepciones ilegales con parámetros hacia arriba}}} El archivo de aplicaciones de applicationcontext-beanss.xml utilizado para todas las clases de entidad
<? xml versión = "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: schemalocation http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/ http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springfframework.org/schema/tx/spring-tx-2.5.5.5. < Para detalles-> <!- **************************************************************************************************************************************************************Ía ******************************************************************************************************************************************************************************************************************************A. **************************************************************************************************************************************************************Ía ******************************************************************************************************************************************************************************************************************************A. **************************************************************************************************************************************************************Ía ******************************************************************************************************************************************************************************************************************************A. ******************************************************************************************************************************************************************************************************************************A. ******************************************************************************************************************************************************************************************************************************A. Al ejecutar testInjection22 (), la salida predeterminada será ====== UNDILDATEPROPERTYEditor.SetEteText () ====== 4 de junio de 2010-> <!-Es decir, el valor predeterminado de lazy-init = "true" no está configurado en este momento, lo que significa que el valor de la propiedad de fecha en bean11 se ha inyectado-> <!-de hecho, cuando la primavera predeterminada crea la aplicación de la aplicación, la aplicación, la aplicación de la aplicación, se ha inyectado en el bean1e-> <! Objetos en el archivo de configuración e inyección-> <!-La ventaja de esto es que si algunas configuraciones en el archivo de configuración de Spring se escriben incorrectamente, se puede detectar inmediatamente-> <!-El archivo de configuración de Struts1.x no tendrá ningún problema si una clase se escribe incorrectamente. Solo cuando realmente se ejecuta-> <!-para Spring, también puede usar los atributos relevantes para retrasar la inicialización del archivo de configuración, es decir, predeterminado, lazy-init = "true"-> <!-es decir, cuando realmente se usa, vaya al nuevo objeto e inyecte el atributo. Esto implica perezoso, es decir, la inicialización de retraso-> <!-Simplemente modifique el archivo de configuración de Spring, como <beans xsi: schemalocation = "http: // www ...." predeterminado lazy-init = "true">-> <!-El alcance de la acción en este momento es todo el archivo de configuración. Del mismo modo, los atributos de la entrada perezosa de cada etiqueta <Bean> también se pueden configurar por separado-> <!-Pero esto no está configurado, pero la inyección se completa cuando se crea laFactory, lo cual es conveniente para verificar los errores-> <! ****************************************************************************************************************************************************** --> <bean id="bean11"> <property name="intValue" value="123"/><!-- When injected, the string 123 will Convertir automáticamente a int-> <Property name = "strvalue" value = "hello_spring"/> <propiedad name = "arrayvalue"> <list> <valor> array11 </valor> <alon valor> array22 </valor> </list> </sperties> <propers name = "listvalue"> <list> <al value> list11 </value> <valon> list22 </value> </value </value </value </value> </value> </value> </propiedad de la propiedad> </propietaria> </list> </value> </valor> </value </value </value> </value> </valor> </propiedad de propiedad> </propiedad> </propiedad> </valor> </valor> </valor> </valor> </valor> </valor> name = "setValue"> <set> <value> set11 </value> <value> set22 </value> </set> </propiety> <Property name = "mapValue"> <map> <entry key = "key11" value = "value11"/> <entry key = "key22" value = "value22"/> </s map> </propial> <propiets name = "datevalue" value "4, 2010" "" "" "", 2010 "/2010" "". Aquí el formato de fecha debe ser el mismo que la configuración de ApplicationContext-Editor.xml-> </ Bean> <Bean ID = "Bean22"> <Property Name = "Bean33" Ref = "Bean33"/> <Property Name = "Bean44" Ref = "Bean44"/> <Property Name = "Bean55" Ref = "Bean55"/> </bean> <Bean ID = "555" "Nombre de propiedad =" Bean55 "Ref =" Bean55 "/> <///> <Bean ID =" 555 "" Bean Name = "Beane55" Ref = "Bean55"/> </bean> <Bean Id = "555" <Propers Name = "Bean =" HABTABLE "PAFONA CONTAJE" value = "123"/> </bean> </reras>
El archivo de applicationContext-Common.xml utilizado para las clases de entidad pública
<? xml versión = "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: schemalocation http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/ http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springfframework.org/schema/tx/spring-tx-2.5.xsd " beans--> <!-- First, specify the abstract property of the <bean> tag to true, and then specify its parent in other <beans>--> <bean id="AbstractBean" abstract="true"> <property name="id" value="2"/> <property name="name" value="Zhang Qiling"/> <property name="sex" value="Male"/> </bean> <bean id="bean33" parent = "abstractbean"/> <bean id = "bean44" parent = "abstractbean"> <propiedad name = "age" value = "26"/> </bean> </ beans> <!-Los prototipos de Bean33 y Bean44 antes de usar AbstractBean son los siguientes San "/> <propiedad name =" sex "value =" macho "/> </bean> <bean id =" bean44 "> <propiedad name =" id "value =" 100 "/> <propiedad name =" name "value =" zhang san "/> <propiedad name =" sex "value =" masculino "/> <name de propiedad =" edad "value =" 90 "/> </bean> -> -> -> -> -> -> -> -> -> ->
El archivo AplicationContext-Editor.xml utilizado para el editor de propiedades java.util.date
<? xml versión = "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: schemalocation http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/ http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springfframework.org/schema/tx/spring-tx-2.5.xsd ">" id = "UdildatePropertyEditor"> <Property Name = "Pattern" Value = "yyyyy mm mes ddd"/> </bean> <!-verifique el código fuente y encuentre que un método setcustomeditors se proporciona en la línea 131 de la clase de adivina de customeditor, para que pueda inyectar-> <bean id = "costuñas"> <nombre de propiedad = "name de costumbereditors" key = "java.util.date" value-ref = "UdildatePropertyEditor"/> </s map> </property> </bean> </beans> <!-También puede usar el interno <Bean> para escribir el acceso de UtililDatePertyEditor internamente-> <!-De esta manera, solo que solo tiene el derecho de usarlo y no se puede usar el exterior externo. <Bean>-> <!-Ejemplo es el siguiente-> <!-<bean id = "CustomEditors"> <Property name = "CustomEditors"> <s map> <inying key = "java.util.date"> <Bean> <Property Name = "Pattern" Value = "yyyyy MM Month DDD Día"/> </bean> </etning> </s map> <///"/"
Finalmente, la clase de prueba unitaria escrita usando JUnit3.8
paquete com.jadyer.junit; import junit.framework.testcase; importar org.springframework.context.applicationContext; importar org.springframework.context.support.classpathxmlaPplicationContext; import com.jadyer.model.bean11; import com.jadyer.model.bean22; Public Class PropertyInectionTest extiende TestCase {private ApplicationContext Factory; @Override Protected void setup () lanza la excepción { /**** ==== Lea un solo archivo de configuración ===== **** // Factory = new ClassPathXMLApPlicationContext ("ApplicationContext.xml"); /****) String [] {"ApplicationContext.xml", "ApplicationContext-Editor.xml"}; // fábrica = new ClassPathXMLApPlicationContext (configLocations); /**** ====== Use el*patrón de coincidencia*para leer múltiples archivos de configuración ==== ****/// Un dicho popular en la industria: las convenciones son mejores que la configuración // Entonces, cuando hay un acuerdo unificado y mejor, puede usar las funciones proporcionadas por el marco para reducir el monto de la configuración // además: si la aplicación de la aplicación-*. XML no se lee, incluso se lee. new ClassPathXMLApPlicationContext ("ApplicationContext-*. Xml"); } /*** Este método demuestra la inyección de atributos comunes, incluidos int, string, matriz, lista, conjunto, mapa, inyección de fecha* @see donde se implementa la inyección de tipo de fecha con la ayuda del editor de propiedades de primavera* /public void testInection11 () {// bean11 bean11 = new bean11 (); // Si eres simple, entonces sus atributos no se inyectarán. El requisito previo para la inyección debe tomarse fuera del contenedor del COI antes de inyectar bean11 bean11 = (bean11) fábrica.getBean ("bean11"); // En este momento se obtiene Bean11 del contenedor IOC, por lo que sus dependencias se inyectarán en 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 ()); } / *** Este método demuestra principalmente la abstracción de las configuraciones públicas para reducir la cantidad de configuración* / public void testInjection22 () {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 ()); }}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.