Spring proporciona muchos postprocesadores para que los desarrolladores se expandan, como BeanPostProcessor, BeanFactoryPostProcessor, BeanValidationPostProcessor y otros postprocesadores. La mayoría de sus métodos de uso son similares. Comprenda uno de ellos y domine sus métodos de uso, y los otros pueden ser entendidos por analogía.
Aquí usamos BeanPostProcessor como ejemplo para mostrar cómo se usa.
La interfaz BeanPostProcessor proporciona dos métodos para que los desarrolladores personalicen: posprocessbeforinitialización y posprocesa.
Postprocessbeforinitialización: este método es principalmente para que la primavera personalice el proceso antes de llamar al método de inicialización cuando se inicializa Bean.
PostProcessAfterInitialization: este método es principalmente para que la primavera personalice el proceso después de llamar al método de inicialización cuando la inicialización de frijoles.
Código de muestra:
/** * Test Bean */public class Cat {Nombre de cadena privada; edad privada int; public void say () {System.out.println ("Nombre:" + nombre); System.out.println ("Age:" + edad); } public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; } public int getAge () {return Age; } public void setAge (int Age) {this.age = edad; }} /*** Postprocesador personalizado*/public class CatBeanPostProcessor implementa BeanPostProcessor {@nullable @Override Public Object PostProcessBeForeinitialization (Object Bean, String BeanName) arroja beanSexception {if (beanfef) {// emerge atributo original Cat = (cat) bean; cat.say (); Bean de regreso; } return bean; } @Nullable @Override Public Object PostProcessAfterInitialization (Object Bean, String BeanName) lanza BeanSexception {if (bean instanceOf CAT) {// Modifique el valor de atributo y return Cat Cat = (Cat) Bean; cat.setName ("Hola Maomi"); Cat.Setage (3); gato de regreso; } return bean; }} /** * Run */public class Run {public static void main (string [] args) {applicationContext ApplicationContext = new ClassPathXMLApPlicationContext ("Spring-Bean.xml"); Cat Cat = (Cat) ApplicationContext.getBean ("Cat"); cat.say (); }}Información de configuración de XML
<!-Configurar bean e inicialize-> <bean id = "cat"> <propiedad name = "name" value = "hellokitty" /> <propiedad name = "age" value = "1" /> < /bean> <bean id = "catBeanPostProcessor" />>
Resultado de salida:
Nombre: Hellokitty
Edad: 1
Nombre: Hola Maomi
Edad: 3
Puede ver que la información de Bean procesada a través del postprocesador ha cambiado. Finalmente, echemos un vistazo a cómo llamar a implementaciones personalizadas en el código fuente.
En el método de bean de inicialización: abstractAutowirecapableBeanFactory.java
/** * Bean de inicialización */Objeto protegido InitializeBean (String String BeanName, Final Object Bean, @nullable rootBeanDefinition mbd) {// omitir parte del código irrelevante objeto envuelto = bean; // antes de la inicialización if (mbd == null || } try {// llamando al método de inicialización para inicializar el bean InvokeInitMethods (BeanName, WrappedBean, MBD); } catch (throwable ex) {lanzar nueva beancreationException ((mbd! = null? mbd.getResourcedescription (): null), beanName, "invocación del método init fallido", ex); } // if (mbd == null || } return WrappedBean; } // El método PostProcessBeForeinitialization llama a @Override Public Object AplicBeanPostProcessorsSBeForeInitialization (Object EXISTBEan, String BeanName) arroja BeanSexception {Object result = ExisterBean; For (BeanPostProcessor BeanProcessor: getBeanPostProcessors ()) {// llamando al objeto de método personalizado postprocessbeForeinitialization objeto Corriente = beanprocessor.postProcessBeForeInitialization (resultado, beanName); if (current == null) {return resultado; } resultado = actual; } resultado de retorno; } // Método PostProcessAfterInitialization la llamada @Override Public Object ApliceBeanPostProcessorSAfterInitialization (Object EXISTBEan, String BeanName) arroja BeanSeXception {Object date = EXISTBEan; para (beanpostprocessor beanprocessor: getBeanPostProcessors ()) {// Método personalizado PostProcessAfterInitialization llama objeto Current = BeanProcessor.PostProcessAfterInitialization (resultado, BeanName); if (current == null) {return resultado; } resultado = actual; } resultado de retorno; }Lo anterior es el proceso de llamada de Spring para implementar métodos personalizados. Espero que sea útil para el aprendizaje de todos, y espero que todos apoyen más a Wulin.com.