InitializingBeanインターフェイスは、豆のメソッドを初期化する方法を提供します。 AfterPropertiessetメソッドのみが含まれます。インターフェイスを継承するクラスは、Beanを初期化するときにメソッドを実行します。
次のようにテストしました:
Import org.springframework.beans.factory.initializingbean; public class testinitializingbean exmments initial bean {@override public void abulspropertiesset()throws exception {system.out.println( "ceshi initializingbean"); } public void testinit(){system.out.println( "ceshi init-method"); }}構成ファイル
<bean id = "testinitializingbean"> </bean>
主な関数は次のとおりです
public class main {public static void main(string [] args){applicationContext context = new FilesystystemxmlapplicationContext( "/src/main/java/com/beans.xml"); }}テスト結果は次のとおりです。
Ceshi initializingbean
これは、スプリングが豆を初期化するとき、豆が初期化豆のインターフェイスを実装する場合、AfterPropertiessetメソッドが自動的に呼び出されることを意味します。
そのため、豆を構成するときに、init-method構成を使用して豆の初期化方法を構成することもできます。これら2つのうちどれが最初に実行されますか?次に、それをテストし、構成ファイルを変更し、init-methodを追加します。
<bean id = "testinitializingbean" init-method = "testinit"> </bean>
プログラムを実行して結果を取得します。
Ceshi initializingbean
CESHI init-method
結果から、スプリングがBeanを初期化すると、Beanが初期化Beanインターフェイスを実装し、構成ファイルのinit-methodを指定する場合、システムは最初にabherpropertieset()メソッドを呼び出し、次にinit-methodで指定されたメソッドを呼び出すことがわかります。
では、この方法は春にどのように実装されていますか?スプリングロード豆のソースコードクラスを見ると、謎を見ることができます。 abstaptautowiredCapableBeanFactoryクラスのInvokeInitMethodsは、次のように非常に明確です。
保護されたvoid invokeInitMethods(String beanName、Final Object Bean、rootBeanDefinition MBD)スロー可能{// BeanがInitializingBeanインターフェイスを実装したかどうかを判断します。 initializingbeanインターフェイスが実装されている場合、beanのaffterpropertiessetメソッドのみがboolean isinitializingbean =(bean instance of intivializingbean)と呼ばれます。 if(isinitializingbean &&(mbd == null ||!mbd.isexternallymanageTmethod( "abfterpropertiesset")))))){if(logger.isdebugenabled()){logger.debug( "andpropertiesset(" angpropertiestet( "and bean) } if(system.getSecurityManager()!= null){try {AccessController.Doprivileded(new PrivileGedExceptionaction <Object>(){public object run()throws exception {// afterpropertiesset((初期化)bean).afterportiesset(); } catch(priviledactionexception pae){throw pae.getException(); }} else {//直接andpropertiesset((initivingbean)bean).afterpropertiesset(); }}} if(mbd!= null){string initmethodname = mbd.getinitmethodname(); // init-methodメソッドが指定されているかどうかを区別します。 init-methodメソッドが指定されている場合、確立されたinit-method if(initmethodname!= null &&!(isInitializingbean && "abherpropertiesset" .equals(initmethodname))&&!mbd.isexternallymanageinitmethod(initmethname)){initmethname){ / init-methodメソッドは、InvokeCustominitMethod(BeanName、Bean、MBD)を実装することです。 }}}要約:
1. Springは、豆を初期化する2つの方法を豆に提供し、Beanを初期化し、InitializingBeanインターフェイスを実装し、AfterProperiSestメソッドを実装するか、構成ファイルのinit-methodを介して指定します。どちらの方法も同時に使用できます。
2。初期化Beanインターフェイスを実装すると、AfterPropertiEssetメソッドを直接呼び出します。これは、反射を介してinit-methodで指定されたメソッドを呼び出すよりも少し効率的ですが、init-methodメソッドはスプリングへの依存を排除します。
3. AfterPropertiessetメソッドを呼び出すときにエラーが発生した場合、init-methodで指定された方法は呼び出されません。
春の初期化の役割
Springの初期化ビーンインターフェイスは非常に便利です。スプリングビーンズにあります。 afterpropertiesset()1つのメソッドのみを提供します。この方法を実装すると、Springはフレームワークレベルのサポートを提供します。SRINGコンテナを介してインターフェイスを実装するクラスのインスタンスを作成するとき、AfterPropertiessetメソッドを呼び出します。この方法により、豆が正しく初期化されているかどうかを確認できます。もちろん、init-methodメソッドも使用できます。これらの2つの方法は同時に使用でき、呼び出しの順序はinit-methodです。
要約します
上記は、編集者が紹介した春の初期化ビーンインターフェイスの使用です。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!