La interfaz InitializingBean proporciona una forma de inicializar los métodos para los frijoles. Solo incluye el método AfterPropertIesset. Cualquier clase que hereda la interfaz ejecutará el método al inicializar el bean.
Probado de la siguiente manera:
importar org.springframework.beans.factory.initializingbean; public class testInIdializingBean implementos inicializadores {@Override public void AfterPropertiesSet () lanza la excepción {System.out.println ("Ceshi InitializingBean"); } public void testInit () {System.out.println ("Ceshi init-Method"); }}Archivo de configuración
<bean id = "testInitializingBean"> </bean>
La función principal es la siguiente
Public Class Main {public static void main (String [] args) {ApplicationContext context = new FilesystemXMLApPlicationContext ("/src/main/java/com/beans.xml"); }}Los resultados de la prueba son:
ceshi inicializando bean
Esto significa que cuando la primavera inicializa los frijoles, si el bean implementa la interfaz inicializadora de la línea de inicio, se llamará automáticamente el método AfterPropertIesset.
Entonces, el problema es que al configurar los frijoles, también puede configurar el método de inicialización para el bean utilizando la configuración del método init. ¿Cuál de estos dos se ejecutará primero? A continuación, pruebe, modifique el archivo de configuración y agregue Init-Method:
<bean id = "testInitializingBean" init-method = "testInit"> </bean>
Ejecute el programa y obtenga el resultado:
ceshi inicializando bean
ceshi init-método
A partir de los resultados, podemos ver que cuando la primavera inicializa el bean, si el bean implementa la interfaz inicializadora y especifica el método init en el archivo de configuración, el sistema primero llama al método AfterPropertieset () y luego llama al método especificado en el método init.
Entonces, ¿cómo se implementa este método en primavera? Al observar la clase de código fuente de los frijoles de carga de resorte, puede ver el misterio. El invokeInitMethods en la clase abstractAutowiredCapableBeanFactory es muy claro, como sigue:
InvokeInitMethods de Void protegido (String BeanName, Final Object Bean, RootBeanDefinition MBD) lanza lanzables {// juzga si el bean ha implementado la interfaz InitializingBean. Si se implementa la interfaz de InicializingBean, solo el método AfterPropertIesset del bean se llama boolean isinitializingbean = (bean instancia de inicializingbean); if (isInitializingBean && (mbd == null || } if (system.getSecurityManager ()! = null) {try {accessController.Doprivileged (new PrivilegEdExceptionAction <Sect> () {public Object Run () lanza excepción {// directamente AfterPropertIesset ((InitializingBean) bean). } capt (privilegedActionException pae) {throw pae.getException (); }} else {// llame directamente a AfterPropertIesset ((InitializingBean) Bean) .AfterPropertIesset (); }}} if (mbd! = null) {string initMethodName = mbd.getInitMethodName (); // Distinga si se especifica el método Init-Method. Si se especifica el método init-métodos, entonces el método init establecido if (initMethodName! = Null &&! (IsInitializingBean && "AfterPropertIesset" .equals (initMethodName)) &&! MBD.ISEXTernallyMeGnedInIdInitMethod (initMethodName)) {// más. El método Init-Method es implementar InvokeCustominitMethod (BeanName, Bean, MBD); }}}Resumir:
1. Spring proporciona a los frijoles dos formas de inicializar los frijoles, implementar la interfaz InitializingBean, implementar el método AfterPropertIesset o especificarlo a través del método init en el archivo de configuración. Ambos métodos se pueden usar al mismo tiempo.
2. Implementación de la interfaz de InicializingBean llama directamente el método AfterPropertIesset, que es un poco más eficiente que llamar al método especificado por el método init a través de la reflexión, pero el método Init-Method elimina la dependencia de la primavera.
3. Si se produce un error al llamar al método AfterPropertIesset, no se llama al método especificado por método init.
El papel de la primavera de inicialización
La interfaz inicializadora de Spring es muy útil. Se encuentra en frijoles de primavera. Solo proporciona un método AfterPropertIesset (). Cuando implementa este método, Spring le proporcionará soporte de nivel de marco: cuando produce una instancia de la clase que implementa la interfaz a través del contenedor Sring, llamará al método AfterPropertIesset. A través de este método, puede verificar si su frijol se inicializa correctamente. Por supuesto, también puede usar el método Init-Method. Estos dos métodos se pueden usar al mismo tiempo, y el orden de las llamadas es el método init.
Resumir
Lo anterior es el uso de la interfaz InicializingBean en Spring presentada por el editor. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!