質問してください
春に豆のインスタンス化は、豆のライフサイクルの重要な部分です。通常、豆は初期化後も変化しません。
では、Spring Instance Beanのプロセスは何ですか? !
スプリングインスタンスビーンプロセス分析
Beanオブジェクトを取得するには、最初にBeanFactoryのGetBean()メソッドを使用して取得する必要があります。この期間中、一連のステップが渡され、Beanオブジェクトがインスタンス化されます。
ステップ1:Beanのデフォルトコンストラクター(もちろん、他のコンストラクターにも指定されることもあります)を呼び出して、Beanインスタンスを生成します。Bean1。
ステップ2:Beanの属性値がBean構成ファイルに注入されるかどうかを確認します。注入がある場合は、bean1インスタンスに基づいて属性を注入し、元のbean1を上書きして新しいbeanインスタンスを形成します:bean2。
ステップ3:BeanがInitializingBeanインターフェイスを実装するかどうかを確認します。このインターフェイスが実装されている場合は、AfterPropertiEsset()メソッドを呼び出して、Bean2で対応する操作を実行し、Bean2を上書きして新しいBeanインスタンスを形成します。Bean3。
ステップ4:init-methodプロパティがBean構成ファイルで指定されているかどうかを確認します。指定されている場合は、このプロパティの対応する方法を呼び出し、Bean3で対応する操作を実行し、最後にBean3を上書きして新しいインスタンスを形成します:Bean4。
上記の手順を通じて、春が豆をインスタンスすると、豆が絶えず変化していることがわかりました!
スプリングインスタンスビーンプロセスコードのデモンストレーション
上記の手順をよりよく説明するには、次のコードを参照してください。
エンティティクラス:
/***エンティティクラス*/パブリッククラスの従業員を実装したBean、DosisobleBean、BeannameAware {private string id; //従業員番号プライベートストリング名; //従業員名プライベートストリングセックス; //従業員のプライベートストリング年齢; //従業員のプライベートストリング部門; //従業員のプライベートストリング部門; 1:豆のデフォルトコンストラクターを呼び出します************* "); this.id = "bean1:g080405214"; system.out.println( "bean1の値:" + this); system.out.println( "***********ステップ2:Beanのプロパティ値がBean構成ファイルに注入されているかどうかを確認します********************* {system.out.println( "bean2の値:" + this); system.out.println( "*************ステップ3:beanが初期化ビーンインターフェイスを実装するかどうかを確認します*****************"); "bean3:25"; system.out.println( "bean3の値:" + this);} public void init(){system.out.println( "*************ステップ4:init-methodがBean構成ファイルで指定されているかどうかを確認します*****************"); "bean3:beijing"; system.out.println( "bean4の値:" + this);} public void destroy()throws exception {system.out.println( "************** Service Stop ***********");} public void setBeanName(string arg0){system.out.println( " bean ***************** "); this.beanname =" mybeanname ";} public string getid(){return id;} public void setid(this.id = id;} public string getname(){return name;} public void name(String name){noter name;} public getsex() setSex(String sex){this.sex = sex;} public string getage(){return age;} public void setage(this.age = age;} public string getnativeplace(){return nativeplace;} public void setnative(string native){this.native place = nativement place;} public string getDepartment() departion){this.department = department;} public string getbeanname(){return beanname;}@override public string toString(){return "Employee [id =" + id + "、name =" + name + "、sex =" + sex + "、age =" + age + "、native +" "]";}}ツール:
/*** BEANコンテキストツールクラス*/パブリッククラスBEANCONTEXTHELPER {private static ApplicationContext _instance; static {if(_instance == null)_instance = buildapplicationcontext();} private beancontexthelper(){}/**アプリケーションのビルドテクストのbublatextextextextextextextext {return new ClassPathXMLApplicationContext( "ApplicationContext-base.xml");}/*** applicationContextオブジェクトを取得*/public static applicationContext getApplicationContext(){return _instance;}}}SpringのBean構成:
<?xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns:Context = "http://www.springframework.org/schema/context" xmlns:aop = "http://www.springframework.org/schema/aop" xmlns:tx = " xsi:schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www. http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/spring--1.5.5.x. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/TX http://www.springframework/sorg/schema/spring-tx-2.5.x- <!--================ Test the process of instantiating a bean in Spring BeanFactory --> <bean id="employee" init-method="init" destroy-method="destroy"> <!--The default department is the R&D department --> <property name="department"> <value>bean2: R&D department</value> </property> </bean> </beans>
テストクラス:
/*** BeanFactory Instantiation Bean Engineering Test Class*/public Class Test {public static void main(string args []){test test = new test();} public void test(){applicationContext context = beancontexthelper.getApplicationContext();従業員=(従業員); context.getBean( "Employee"); System.out.println( "************春からBeanFactoryが取得した最終的なBeanインスタンス************"); System.out.println( "最終Beanの値:" +従業員);}}}}実行結果:
************ステップ1:Beanのデフォルトコンストラクターを呼び出す****************** bean1:従業員[id = bean1:g080405214、name = null、null、null、native = null、null、null、null = null、null = null] bean ********************* bean2の値:従業員[id = bean1:g080405214、name = null、sex = null、age = null、nultplace = null、bean2:r&d department、beanname = mybeanname] ******************************************* BEAN3:従業員[ID = Bean1:G080405214、name = bean3:li Xiaohong、sex = bean3:femal、bean3:25、native = null、department = bean2:beanname = mybeanname] ***********ステップこの属性****************** bean4の値:従業員[id = bean1:g080405214、name = bean3:li xiaohong、sex = bean3:bean3:bean3:25、nativeplace = bean3:beijing、department = bean2:r&d department、beanname = mybeanname] BeanFactory ***************最終的なBean値:従業員[ID = Bean1:G080405214、name = bean3:li Xiaohong、sex = bean3:female = bean3:25、bean3:beijing、department = bean2:r&department、beanname = mybeanname]
操作結果から判断すると、Beanインスタンスの特定のプロセスについて非常に明確にする必要があります。
従業員は3つのインターフェイスを実装しています:
InitializingBean:このインターフェイスは、AfterPropertiesset()メソッドを提供します。これは、初期化の定義機能をBeanに提供するために使用されます。
DisapleableBean:このインターフェイスは、Beanインスタンスが破壊される前に運用機能を提供するために使用されるDestroy()メソッドを提供します。
Beannameaware:このインターフェイスは、Bean Nameの設定機能を提供するために使用されるSetbeanName()メソッドを提供します。上記の実行結果から、この方法は2番目のステップで実行されます。
要約します
上記は、春に豆をインスタンス化するプロセスに関するこの記事の内容全体です。私はそれが誰にでも役立つことを願っています。興味のある友達は引き続きこのサイトを参照できます:
「春に豆の獲得をカスタマイズする2つの方法」
「 JavaのSpring Annotation Configuration Beanインスタンスコード分析」
「春の構成と使用のライフサイクルの詳細な説明」
欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!