Spring fournit de nombreux postprocesseurs pour que les développeurs se développent, tels que BeanPostProcessor, BeanfactoryPostprocessor, BeanValidationPostprocessor et autres postprocesseurs. La plupart de leurs méthodes d'utilisation sont similaires. Comprendre l'un d'eux et maîtriser leurs méthodes d'utilisation, et les autres peuvent être compris par analogie.
Ici, nous utilisons BeanPostProcessor comme exemple pour montrer comment il est utilisé.
L'interface BeanPostProcessor fournit deux méthodes pour les développeurs à personnaliser: postprocessBeforesinitialization et postprocessafterinitialisation.
PostprocessbeforeInitialization: cette méthode est principalement pour Spring pour personnaliser le processus avant d'appeler la méthode d'initialisation lorsque le bean est initialisé.
Postprocessafterinitialisation: Cette méthode est principalement pour Spring pour personnaliser le processus après avoir appelé la méthode d'initialisation lors de l'initialisation du bean.
Exemple de code:
/ ** * Tester Bean * / classe publique Cat {nom de chaîne privée; Âge privé; public void Say () {System.out.println ("Name:" + name); System.out.println ("Age:" + Age); } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public int getage () {return âge; } public void Setage (int Age) {this.age = age; }} / ** * PostProcessor personnalisé * / classe publique CatBeanPostProcessor implémente BeanPostProcessor {@Nullable @Override Object PostProcessBeforeInitialization (Object Bean, String Beanname) lance BeanSexception {if (bean instanceof Cat) {// Sortie d'attribut original attribut chat Cat = (cat) Bean; cat.say (); Retour haricot; } return bean; } @Nullable @Override Public Object PostProcessafterinitialization (objet bean, string beanname) lève BeanSexception {if (bean instanceof cat) {// modifier la valeur d'attribut et return Cat cat = (cat) bean; Cat.setName ("Hello Maomi"); Cat.Setage (3); retour chat; } 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 (); }}Informations sur la configuration XML
<! - Configurer le bean et initialiser -> <bean id = "Cat"> <propriété name = "name" value = "hellokitty" /> <propriété name = "age" value = "1" /> </-bean> <bean id = "catBeanPostProcessor" />
Résultat de sortie:
Nom: Hellokitty
Âge: 1
Nom: Bonjour Maomi
Âge: 3
Vous pouvez voir que les informations sur les haricots traitées via le post-processeur ont changé. Enfin, jetons un coup d'œil à l'appel d'implémentations personnalisées dans le code source.
Dans la méthode d'initialisation du bean: abstractautowirecapablebeanfactory.java
/ ** * Initialisation Bean * / objet protégé InitializeBean (Final String Beanname, Final Object Bean, @Nullable rootBeAnDefinition MBD) {// OMIT PARTIE DU CODE UNE CODE NON REPLACEM // avant l'initialisation if (mbd == null ||! Mbd.issynthetic ()) {enveloppebbean = applicationBeAnPostProcessorBeforeInitialization (enveloppebean, beanname); } essayez {// appelant la méthode d'initialisation pour initialiser le bean invokeInitMethods (beanname, enveloppedBean, mbd); } Catch (Throwable Ex) {Throw New BeanCreationException ((MBD! = NULL? MBD.GetResourcedEsseScription (): null), beanname, "Invocation of init Method a échoué", ex); } // if (mbd == null ||! Mbd.issynthetic ()) {enveloppean = applicationBeAnPostProcessorSafterinitialization (enveloppebean, beanname); } return EmbaptedBean; } // La méthode postprocessbeforeInitialization appelle @Override public Object ApplyBeanPostProcessorsBeforeInitialization (objet existantBean, string beanname) lève BeanSexception {objet résultat = existantBean; pour (BeanPostProcessor BeanProcessor: getBeAnPostProcessors ()) {// appelant le postprocess personnalisé de la méthode d'objet Current = BeanProcessor.PostProcessBelForeInitialization (résultat, beanname); if (current == null) {return result; } résultat = courant; } Retour Résultat; } // Méthode postprocessafterinitialization appelle @Override public objet applicable APPLICTIONBEANPOSTPROCESSORSAFTERInitialization (objet existantBean, string beanname) lève BeanSexception {objet result = existantBean; pour (BeanPostProcessor BeanProcessor: getBeAnPostProcessors ()) {// PostProcessaSaFterinialisation Méthode appelle un objet Current = BeanProcessor.PostProcessaFterinitialization (résultat, beanname); if (current == null) {return result; } résultat = courant; } Retour Résultat; }Ce qui précède est le processus d'appel de Spring pour implémenter des méthodes personnalisées. J'espère que cela sera utile à l'apprentissage de tous, et j'espère que tout le monde soutiendra davantage Wulin.com.