序文
前の記事では、主に豆の構成、注入、およびカスタムプロパティエディターについて学びました。今日は、豆のライフサイクルに精通しましょう。
どんなものでも、それ自体のライフサイクル、始まり、人生の終わりがあります。あなたが最もよく知っているのは、サーブレットのライフサイクルです。サーブレットのように、スプリングビーンズにも独自のライフサイクルがあります。
ライフサイクルは開発において非常に一般的な名詞であり、基本的にすべてのプログラミング言語がそれに関連付けられていることがわかります。また、オンラインで多くのBean Life Cyclesを探しましたが、基本的には同じです。ここでは、主にコードを介して検証したいと思います。結局のところ、私が学んだ知識は同じです、私はJavaを学びました、そして最も重要なことは、それをもっと覚えていることができるように、実践的な練習です。
以下は、そのライフサイクルの説明であり、デモを通して検証します。
次の図は、それが実行される順序を示しています。
1.リフトサイクルクラスを作成して5つのインターフェイスメソッドを実装します:BeanFactoryAware、Beannameaware、InitializingBean、dasuperablebean、ApplicationContextaware
パッケージcuiyw.spring.service; import org.springframework.beans.beansexception; Import org.springframework.beans.factory.beanfactory; Import org.springframework.beans.factory.beanfactoryaware; Import org.springframework.beans.beans.factory.bueannameawork org.springframework.beans.factory.disposablebean; Import org.springframework.beans.factory.initializingbean; Import org.springframework.context.applicationContext; Import org.springframework.context.applicextextaware; public class lifeceme emplements BeanFactoryAware、BeanNameAware、InitializingBean、DosusableBean、ApplicationContextAware {private string name; public String getName(){System.out.println( "getName name ="+name);返品名; } public void setName(string name){system.out.println( "setName name ="+name); this.name = name; } public void afterpropertiesset()スロー例外{// dodo auto-fenated method stub.out.println( "intializingbean.afterpropertiesset()"); } public void setBeanName(string arg0){// todo auto-enerated method stub.out.println( "beannameaware.setbeanname"); } public void setBeanFactory(BeanFactory Arg0)Throws BeanSexception {// Todo auto-enerated method stub.out.println( "beanfactoryaware.setbeanfactory"); } public void destroy()スロー例外{// dodo auto-enerated method stub.out.println( "dissopablebean.destroy"); } public void myInit(){system.out.println( "【init-method】<bean>"のinit-methodプロパティで指定された初期化方法を呼び出す); } public void mydestory(){system.out.println( "【destroy-method】<bean>")のdestroy-methodプロパティによって指定された初期化方法を呼び出す); } public void setApplicationContext(applicationContextArg0)Throws BeanSexception {// Todo auto-enerated method stub.out.println( "applicationContextAware.setApplicationContext"); }}2. instantiationaisiationawarebeanpostprocessorインターフェイスを登録します
パッケージcuiyw.spring.service; Import java.beans.propertydescriptor; import org.springframework.beans.beansecception; Import org.springframework.beans.propertyvalues; Import org.springframework.beans.factory; myinStantiationAwareBeanPostprocessor InstantiationAwarebeanPostProcessor {public ObjectPostprocessafterInitialization(オブジェクトBean、String BeanName)BeanSexception {// Todo auto-generated method stuct.out.out.println( "Instantiationawarbeanpostprocessess.processestess");豆を返します。 } public ObjectPostProcessBeForeInitialization(Object Bean、String BeanName)BeanSexception {// todo auto-enerated method stub.out.println( "instantiationawarebeanpostprocessor.postprocessbeforeinitialization");豆を返します。 } public Boolean Poferprocessafterinstantiation(Object Bean、String BeanName)BeanSexception {// Todo auto-enerated method stub.out.println( "instantiationawarebeanpostprocessor.postprocessafterinstantiation"); trueを返します。 } public Object postprocessbeforeinstantiation(class <? nullを返します。 } publicValues postprocessPropertyValues(PropertyValues PVS、PropertyDescriptor [] PDS、Object Bean、String BeanName)Throws BeanSexception {// Todo auto-enerated method Stub.out.println( "instantiationawarebeanpostprocessor.postprocesspropertyvalues"); PVSを返します。 }}3. beanpostprocessorインターフェイスを登録します
実際、InstantiationAwarebeanPostprocessorはBeanPostProcessorを継承するため、上記のBeanPostProcessorインターフェイスの方法も実装しました。
パッケージcuiyw.spring.service; import org.springframework.beans.beansection; Import org.springframework.beans.factory.config.config.beanpostprocessor;パブリッククラスmybeanpostprocessorは、beanpostprocessor {beansizationization(beanname、beanname、beanname、beanname afsisization){beanpostprocess // todo auto-feenated method stub.out.println( "beanpostprocessor.postprocessafterinitialization");豆を返します。 } public Objectプロセスの前面化(Object Bean、String BeanName)BeanSexception {// Todo auto-enerated method stub System.out.println( "beanpostprocessor.postprocessbeforeInitialization");豆を返します。 }}4. BeanFactoryPostProcessorインターフェイスを登録します
パッケージcuiyw.spring.service; import org.springframework.beans.beansexception; Import org.springframework.beans.factory.config.config.beanfactorypostprocessor; Import org.springframework.beans.factory.config.configurableristable beanfactsfactsfactsfactodyprocestsprocestess; beanfactorypostprocessor {public void postprocessbeanfactory(configureablelistablebeanfactory arg0)throws beansexception {// todo auto-enerated method stub.out.println( "beanfactorypostprocessor.postprocessbeanfactory"); }}5。コンテキストで構成します
前のブログのデモに基づいて変更します。他の干渉を受けるために、最初にサービスを削除します。
<?xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation = "http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xd"> <bean id = "beanpostprocessess"> </bean> <bean id = "InstantiationAwareBeanPostProcessor"> </bean> <bean id = "beanfactorypostprocessor"> </bean> <bean id = "lifecycle" init-method = "myinit" destroy-method = "mydestory"> <property name = "name" value = "cuiyw1"> </bean> </bean
6.主に豆を使用します
パッケージcuiyw.springaop; Import org.springframework.beans.factory.beanfactory; import org.springframework.context.applicationcontext; import org.springframework.context.support.classpathxmlapplicationcontext; import cuiyw.spring.iservice; cuiyw.spring.service.lifecycle; public class app {public static void main(string [] args){applicationContext Context = new ClassPathXMLApplicationContext(new String [] {"ApplicationContext.xml"}); BeanFactory Factory = Context;ライフサイクルライフサイクル= Factory.getBean( "Lifecycle"、lifecycle.class); lifecycle.setname( "cuiyw2"); system.out.println( "lifecycle.name ="+lifecycle.getname()); ((classpathxmlapplicationContext)Factory).registershutdownhook(); /* service =(iservice)factory.getbean("servicea "); service.service( "cuiyw servicea"); service =(iservice)factory.getbean( "serviceimpl"); service.service( "cuiyw serviceimpl"); */}}7.印刷結果を入力します
出力の順序は、基本的に上の図の順序と同じであることがわかります。
要約します
上記は、この記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。