L'interface InitializingBean fournit un moyen d'initialiser les méthodes pour les haricots. Il inclut uniquement la méthode AfterPropertiseSet. Toute classe qui hérite de l'interface exécutera la méthode lors de l'initialisation du bean.
Testé comme suit:
import org.springframework.beans.factory.InitializingBean; public class TeshinitializeBean implémente InitializingBean {@Override public void afterpropertiesset () lève exception {System.out.println ("CESHI InitializationBean"); } public void Testinit () {System.out.println ("Ceshi init-Method"); }}Fichier de configuration
<bean id = "TespinitializingBean"> </EAN>
La fonction principale est la suivante
classe publique main {public static void main (string [] args) {applicationContext context = new FileSystemXmlApplicationContext ("/ src / main / java / com / beans.xml"); }}Les résultats des tests sont:
CESHI InitializingBean
Cela signifie que lorsque le printemps initialise les beans, si le bean implémente l'interface InitializingBean, la méthode AfterPropertiseSet sera automatiquement appelée.
Le problème est donc que lors de la configuration des beans, vous pouvez également configurer la méthode d'initialisation pour le bean à l'aide de la configuration d'initiation. Lequel de ces deux sera exécuté en premier? Ensuite, testez-le, modifiez le fichier de configuration et ajoutez Init-Method:
<bean id = "TestinitializingBean" init-Method = "Testinit"> </EAN>
Exécutez le programme et obtenez le résultat:
CESHI InitializingBean
Ceshi Init-Method
D'après les résultats, nous pouvons voir que lorsque Spring initialise le bean, si le bean implémente l'interface InitializingBean et spécifie l'initié-méthode dans le fichier de configuration, le système appelle d'abord la méthode AfterPropertiesET (), puis appelle la méthode spécifiée dans la méthode initiale.
Alors, comment cette méthode est-elle mise en œuvre au printemps? En regardant la classe de code source des haricots de chargement de ressort, vous pouvez voir le mystère. Les invoquer les méthodes dans la classe AbstractAutowiredCapableBeanfactory sont très claires, comme suit:
VOID PROTÉRÉ INVOKEINITMETHODS (String Beanname, Final Object Bean, RootBeAnDefinition MBD) lance Throwsable {// Jugez si le bean a implémenté l'interface InitializingBean. Si l'interface InitializingBean est implémentée, seule la méthode AfterProperTesTet du bean est appelée boolean isInitializingBean = (instance de beanof initializingBean); if (isInitializingBean && (mbd == null ||! mbd.isexternallymanagedInitMethod ("AfterproperTeset"))) {if (logger.isdebugeNabled ()) {logger.debug ("invockerfterpropertiesset () sur le bean avec nom" + Beanname + "''"); } if (System.getSecurityManager ()! = null) {try {AccessController.Doprivileged (new privilEgedException <objet> () {public objet run () lève une exception {// appelle directement après PropertiseSet ((InitizingBean) Bean) .afterproperTetET (); return Null;}}}}}}, GetAsccessConConCon } catch (privilEGEGACTIONException pae) {throw pae.getException (); }} else {// Appelle directement AfterProperTesTet ((InitializingBean) Bean) .AfterProperTesTet (); }}} if (mbd! = null) {String initMethodName = mbd.getInitMethodName (); // distingue si la méthode d'initiation est spécifiée. Si la méthode d'init-méthode est spécifiée, alors l'initiation établie if (initimeThodName! = Null &&! (IsinitializingBean && "AfterProperTeset" .Equals (initMethodName)) &&! Mbd.isexternalmagedInitMethod (initMethodname) {// en outre le code source La méthode Init-Method consiste à implémenter invokeCustomInitMethod (beanname, bean, mbd); }}}Résumer:
1. Spring fournit aux grains de deux façons d'initialiser les beans, d'implémenter l'interface InitializingBean, d'implémenter la méthode AfterProperTesET ou de le spécifier via Init-Method dans le fichier de configuration. Les deux méthodes peuvent être utilisées en même temps.
2. La mise en œuvre de l'interface InitializingBean appelle directement la méthode AfterProperTesset, qui est un peu plus efficace que d'appeler la méthode spécifiée par init-méthode à travers la réflexion, mais la méthode init-méthode élimine la dépendance à Spring.
3. Si une erreur se produit lors de l'appel de la méthode AfterPropertiseSet, la méthode spécifiée par init-méthode n'est pas appelée.
Le rôle de Spring InitializingBean
L'interface InitializingBean de Spring est très utile. Il est situé dans les haricots de printemps. Il ne fournit qu'une seule méthode AfterPropertiseSet (). Lorsque vous implémentez cette méthode, Spring vous fournira une prise en charge au niveau du framework: lorsque vous produisez une instance de la classe qui implémente l'interface via le conteneur SRING, il appellera la méthode AfterProperTesTet. Grâce à cette méthode, vous pouvez vérifier si votre haricot est correctement initialisé. Bien sûr, vous pouvez également utiliser la méthode d'init-méthode. Ces deux méthodes peuvent être utilisées en même temps et l'ordre des appels est l'initié.
Résumer
Ce qui précède est l'utilisation de l'interface InitializingBean dans le printemps présenté par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!