Hacer una pregunta
La instancia de los frijoles en la primavera es una parte importante del ciclo de vida de los frijoles. Por lo general, el bean no cambiará después de la inicialización.
Entonces, ¿cuál es el proceso de bean de instancia de primavera? !
Análisis de procesos de frijol de instanciación de primavera
Para obtener un objeto Bean, primero debe obtenerlo a través del método getBean () de BeanFactory. Durante este período, se pasarán una serie de pasos para instanciar el objeto Bean:
Paso 1: llame al constructor predeterminado del bean (por supuesto, también puede ser otros constructores especificados) para generar una instancia de Bean: Bean1.
Paso 2: Verifique si el valor de atributo del bean se inyecta en el archivo de configuración de Bean. Si hay inyección, inyecte sus atributos basados en la instancia de Bean1, sobrescribe el Bean1 original para formar una nueva instancia de Bean: Bean2.
Paso 3: Verifique si el bean implementa la interfaz inicializadora de la línea. Si se implementa esta interfaz, llame al método AfterPropertiesSet () para realizar las operaciones correspondientes en Bean2 y sobrescribir Bean2 para formar una nueva instancia de Bean: Bean3.
Paso 4: Verifique si la propiedad Init-Method se especifica en el archivo de configuración de Bean. Si se especifica, llame al método correspondiente de esta propiedad y realice las operaciones correspondientes en Bean3, y finalmente sobrescriba Bean3 para formar una nueva instancia: Bean4.
A través de los pasos anteriores, encontramos que cuando las instancias de primavera son un frijol, el frijol está cambiando constantemente.
Demostración del código de proceso de la bean de primavera
Para ilustrar mejor los pasos anteriores, consulte el siguiente código:
Clase de entidad:
/***Entity Class*/Public Class Employee implementa InitializingBean, DisposableBean, Beannameaware {private String id; // Número de empleado Nombre de cadena privada; // Nombre del empleado String privado String Sex;/Employee Gender Private String Age; // Employee Age private String Nativeplace; // Departamento de cadena privada de empleado;//Departamento de sting de empleados de empleado* BeanName; // Bean Name Public Employee Employee () {System.out.Print String ("Departamento de cadena privada; el constructor predeterminado del frijol ************* "); this.id = "Bean1: G080405214"; System.out.println ("Valor de Bean1:" + this); System.out.println ("*********** Paso 2: Compruebe si el valor de propiedad de Bean se inyecta en el archivo de configuración de Bean ***********************");} Void público después {System.out.println ("Valor de Bean2:" + this); System.out.println ("************** Paso 3: Verifique si el Bean implementa la interfaz de InicializationBean ***************"); this.name = "Bean3: li xiaohong"; this.sex = "bean3: femenino"; this.age = "bean3"; system.pintl ("" " valor: " + this);} public void init () {System.out.println (" ************** Paso 4: Verifique si el método init se especifica en el archivo de configuración de Bean ***************** "); this.nativePlace =" Bean3: beijing "; System.out.println (" Valor de Bean4: " + this);} Void destruir () Destroy () Destroy (). {System.out.println ("************* Service Stop ***************");} public void setBeanName (string arg0) {System.out.println ("*********** Establezca el nombre del nombre de la frijoles ******************"); this.BeanName = "myBeanName";} String String getId () id) {this.id = id;} public String getName () {name return;} public void setName (name de cadena) {this.name = name;} public String getsex () {return sex;} public void setsex (string sex) {this.sex = sex;} public string getAge () {return age;} setge de string (string age) getNativePlace () {return nationplace;} public void setnativeplace (string nationplace) {this.nativePlace = nativeplace;} public String getDePartment () {return department;} public void setDePartment (string departam) {this.department = department;} public String String GetBeanName () {return Beane;}}@public Public String thostring () {iT de string string string getBeanName () {return Beane;}}@public Public strid thostring () {iT de return {burnet {Returns [) + id + ", name =" + nombre + ", sexo =" + sexo + ", edad =" + edad + ", nativeplace =" + nationplace + ", departament =" + departamento + ", beanname =" + beanName + "]";}}Herramientas:
/*** Bean Context Tool Class*/public class BeanContexthelper {private static ApplicationContext _Instance; static {if (_Instance == null) _Instance = buildApplicationContext ();} private beanContexThelper () {}/*** Rebuild el objeto de applicationcontext*/public staticContextExtExtExtExtExtExtExtExtExtExtExt () {) ClasspathxmLapplicationContext ("ApplicationContext-Base.xml");}/*** Obtenga un objeto AplicationContext*/public staticContext GetApplicationContext () {return _Instance;}}Configuración de Bean de primavera:
<? 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: context = "http://www.springframework.org/schema/context" xmlns: aop = "http://www.springframework.org/schema/aop" xmlns: tx = "http://wwww.springframework.org/sChMing" " xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/contextExt http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 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 "> <!-===============.
Clase de prueba:
/*** BeanFactory Instanciation Bean Engineering Test Clase*/public class Test {public static void main (String args []) {test test = new test (); test.test ();} public void test () {applicationContext context = beanContexthelper.getAplicationContext (); Empleado = (Empleado) (Empleado) context.getBean ("Empleado"); System.out.println ("************** de la primavera La instancia final de Bean obtenida por BeanFactory ************"); System.out.println ("El valor del frijol final:" + empleado);}}Resultados de ejecución:
************** Paso 1: Llame al constructor predeterminado del frijol ******************* El valor de bean1: empleado [id = bean1: g08040405214, name = null, sex = null, age = null, nativeplace = null, departament = null, beanname = null] ************************** frijoles ******************* El valor de Bean2: Empleado [id = Bean1: G080405214, name = null, sex = null, age = null, nationplace = null, departamento = frijoles2: departamento de R&D, beanName = myBeanName] *********** Paso 3: Compruebe si el bean ha implementado la interfaz de la interfaz de la inicialización de la inicialización de la inicialización de la inicial****************************************. [id = bean1: g080405214, nombre = bean3: li xiaohong, sexo = bean3: femenino, edad = bean3: 25, nativeplace = null, departamento = bean2: departamento de I + D, beanName = myBeanName] ********* Paso 4: Verifique si el metro initod se especifica en el archivo de configuración de Bean. Este atributo ****************** El valor de Bean4: Empleado [id = Bean1: G080405214, Name = Bean3: Li Xiaohong, Sex = Bean3: femenino, edad = bean3: 25, nativo = bean3: beijing, departamento = bean2: r&D department, beanname = myBeanName] *************************************************************************************************************************************************en de Bean. Valor final del frijol: Empleado [ID = Bean1: G080405214, nombre = Bean3: Li Xiaohong, Sex = Bean3: Mujer, Age = Bean3: 25, Nativeplace = Bean3: Beijing, Departamento = Bean2: Departamento de I + D, BeanName = MyBeanName]
A juzgar por los resultados de la operación, debemos ser muy claros sobre el proceso específico de instanciación de frijoles.
Empleado implementa 3 interfaces:
InicializingBean: esta interfaz proporciona el método AfterPropertiesSet (), que se utiliza para proporcionar a Bean la función de definir la inicialización.
DisposableBean: esta interfaz proporciona el método Destroy (), que se utiliza para proporcionar funciones operativas antes de que se destruya la instancia de Bean.
Beannameaware: esta interfaz proporciona el método setBeanName (), que se utiliza para proporcionar la función de configurar el nombre de frijoles. A partir de los resultados de ejecución anteriores, este método se lleva a cabo en el segundo paso.
Resumir
Lo anterior es todo el contenido de este artículo sobre el proceso de instancia de un frijol en primavera. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a este sitio:
" Dos formas de personalizar la adquisición de frijoles en primavera "
" Configuración de la anotación Spring de Java Análisis de código de instancia de Bean "
" Explicación detallada del ciclo de vida de la configuración y uso de la primavera "
Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!