最近、私はこの春の入門書「Springinaction」を購入しました。私は大まかに閲覧し、かなり気分が良くなりました。ほんの少し始めます。マニングの本はまだ良いです。私はマニングの本だけを読む人のようにマニングに焦点を合わせていませんが、私は敬意と情熱を持ってそれを読みます。繰り返しになりますが、IOC、DI、AOPなど、Springのコア概念を受け入れました。最初にIOCとDIについての私の意見について話させてください。
IOC(DI):実際、コアスプリングアーキテクチャの概念はそれほど複雑ではなく、いくつかの本で説明されているほどあいまいではありません。 Javaプログラマーは、Javaプログラムの各ビジネスロジックには、少なくとも2つ以上のオブジェクトがコラボレーションする必要があることを知っています。一般に、各オブジェクトがパートナーオブジェクトを使用する場合、newObject()などの構文を使用してパートナーオブジェクトのアプリケーション作業を完了する必要があります。オブジェクト間の結合が高いことがわかります。 IOCのアイデアは、これらの相互依存オブジェクトの作成と調整を実現するためのスプリングコンテナです。オブジェクトは、関係ビジネスロジック自体を持つだけです。この点で、オブジェクトがコラボレーションオブジェクトをどのように取得するかについての責任は逆転します(IOC、DI)。
これが春のIOCの私の経験です。 DIは実際にはIOCと言う別の方法です。 DIは2004年初頭の論文でMartin Fowlerによって最初に提案されました。彼は次のように結論付けました。コントロールは何ですか?つまり、従属オブジェクトを取得する方法が逆転します。
このコアコンセプトをまだ理解していない場合:ここでは、ブロモンと呼ばれるブログで見つかったシンプルで理解しやすい答えを引用します。
IOCとDI
まず、IOC(逆コントロール、制御の反転)についてお話したいと思います。これが春の中核です。 Springフレームワークでは、Springはオブジェクトのライフサイクルとオブジェクト間の関係を制御する責任があります。これはどういう意味ですか?簡単な例を挙げると、ガールフレンドを見つけるにはどうすればよいですか?よくある状況は、私たちが美しく見える女性がいる場所を見に行き、それから彼らの興味、QQ番号、電話番号、IP番号、IQ番号について尋ねることです。同じことが従来のプログラム開発にも当てはまります。オブジェクトでは、別のオブジェクトを使用する場合は、それを取得する必要があります(自分で新しいオブジェクト、またはJNDIからクエリをする)。使用後、オブジェクトを破壊する必要があり(接続など)、オブジェクトは常に他のインターフェイスまたはクラスと組み合わされます。
では、IOCはどのようにそれをしますか?結婚代理店を通してガールフレンドを見つけることと、私と私のガールフレンドの間で第三者を紹介するようなものです:結婚代理店。結婚代理店は、男性と女性に関する多くの情報を管理しています。私は結婚代理店にリストを提供し、ミシェル・レイスのように見える、リン・シレイのような姿、ジェイ・チョウのような歌、カルロスのようなスピードを持って、Zidaneのような技術を持っているなど、どのようなガールフレンドを見つけたいかを伝えることができます。その後、結婚代理店は私たちの要件に従ってMMを提供します。私たちはただ恋に落ちて結婚する必要があります。それはシンプルで明確です。私たちに与えられた候補者が要件を満たしていない場合、私たちは例外を投げかけます。プロセス全体はもはや私によって制御されていませんが、結婚代理店のような容器のような機関によって制御されています。これは、春までに提唱された開発方法です。すべてのクラスは、Springコンテナに登録され、Springがあなたが何であり、何が必要かを伝えます。その後、Springは、システムが適切なレベルまで実行されているときに必要なものを提供し、同時にあなたを必要とする他のものに引き渡すことができます。すべてのクラスは春までに作成および破壊されます。つまり、オブジェクトのライフサイクルを制御するオブジェクトは、もはやそれを参照するオブジェクトではなく、春になります。特定のオブジェクトの場合、他のオブジェクトを制御するために使用されていましたが、現在はすべてのオブジェクトがSpringによって制御されるため、これは制御反転と呼ばれます。
IOCの重要なポイントの1つは、システム操作中に必要な他のオブジェクトをオブジェクトに動的に提供することです。これは、DI(依存関係)によって達成されます。たとえば、オブジェクトAはデータベースを操作する必要があります。過去には、接続オブジェクトを取得するために常にAでコードを書きました。春には、Aで接続が必要であることをSpringだけに伝える必要があります。この接続を構築する方法とそれを作成するタイミングについては、知る必要はありません。システムが実行されているとき、Springは適切なタイミングで接続を作成し、それを注入のように注入し、各オブジェクト間の関係の制御を完了します。 aは正常に実行するために接続に依存する必要があり、この接続は春ごとに注入され、依存関係注入の名前はこれに由来します。では、DIはどのように実装されていますか? Java 1.3の後の重要な機能は反射です。これにより、プログラムはオブジェクトを動的に生成し、オブジェクトメソッドを実行し、実行時にオブジェクトのプロパティを変更できます。春は反射によって注入されます。リフレクションに関する関連情報については、Javadocを参照してください。
IOCとDIの概念を理解した後、すべてがシンプルで明確になり、残りの作業は春のフレームワークでブロックを積み上げることです。
春の仕組みを学びましょう。
public static void main(string [] args){applicationContext context = new FilesystemxmlapplicationContext( "applicationContext.xml");動物動物=(動物)Context.getBean( "Animal"); Animal.say(); }このコードに精通している必要がありますが、分析しましょう。まず、ApplicationContext.xml
<bean id = "animal"> <プロパティ名= "name" value = "kitty" /> < /bean>
彼はクラスPhz.springframework.test.catを持っています
パブリッククラスの猫は動物を実装します{private string name; public void seas(){system.out.println( "i am" + name + "!");} public void setName(string name){this.name = name;}}}phz.springframework.test.animalインターフェイスを実装しました
public interface animal {public void say(); }明らかに上記のコードはiamkittyを出力します!
では、春はどのようにそれをしますか?
次に、春がどのように機能するかを見て、自分で春を書きましょう!
まず、Beanが所有するプロパティを保存するために使用されるBeanクラスを定義します
/ * bean id */ private string id; / * Beanクラス */プライベート文字列タイプ。 / * Bean Property */ private Map <String、object> Properties = new Hashmap <String、object>();
Beanには、ID、タイプ、およびプロパティが含まれます。
来春は、構成ファイルのロードを開始し、ハッシュマップに構成情報を保存します。 Hashmapの鍵はBeanのIDであり、Hasmapの値はBeanです。この方法でのみ、Context.GetBean(「動物」)メソッドを使用して動物のクラスを取得できます。 Spirngが基本的なタイプを注入し、リストやマップなどのタイプを注入できることは誰もが知っています。次に、スプリングがどのように保存されているかを確認するために、マップを例として見てみましょう
マップ構成は次のようになります
<bean id = "test"> <Property name = "testmap"> <map> <entry key = "a"> <balue> 1 </value> </entry> <entry key = "b"> <balue> 2 </value> </entry> </map> </property> </bean> </bean>
Springは上記の構成をどのように保存しますか?コードは次のとおりです。
if(beanproperty.element( "map")!= null){map <string、object> propertiesmap = new hashmap <string、object>(); element PropertiesListmap =(element)beanproperty.elements()。get(0); iterator <? while(propertiesiterator.hasnext()){element vet =(element)propertiesiterator.next(); if(vet.getname()。equals( "entry")){string key = vet.attributevalue( "key"); iterator <? while(valuesiterator.hasnext()){element value =(element)valuesiterator.next(); if(value.getname()。equals( "value")){propertiesMap.put(key、value.getText()); } if(value.getname()。equals( "ref")){propertiesmap.put(key、new string [] {value.attributevalue( "bean")}); }}}} bean.getProperties()。put(name、propertiesmap); }次に、コアパートに行きましょう。 Springが依存噴射である方法を見てみましょう。実際、依存噴射のアイデアも非常に簡単です。反射メカニズムを通じて実装されます。クラスをインスタンス化すると、クラスの設定方法を反映することにより、ハッシュマップに保存されているクラス属性をクラスに注入します。それがどのように行われているか見てみましょう。
最初にこのようなクラスをインスタンス化します
public static object newInstance(string className){class <? (Illegalaccessexception e){新しいruntimeexception(e);} return obj;}次に、このクラスの依存関係をこのように注入します
public static void setProperty(Object obj、string name、string value){class <?オブジェクト> clazz = obj.getClass(); try {string methodname = returnsetmthodname(name); ms = clazz.getmethods(); for(methingname()。 m.getParametertypes()[0]; setFieldValue(clazzparametertype.getName()、value、m、obj); break;}}}}}} catch(show new runtimeexception(e);} catch(ellegalargumentexception e){Ellegexcection(E) {新しいruntimeexception(e);}}を投げる最後に、このクラスのインスタンスを私たちに返し、使用できます。それがどのように行われるかを見て、マップを例として見てみましょう。私が書いたコードは、ハッシュマップを作成し、このように注入する必要があるクラスにハッシュマップを注入することです
if(value instanceof map){iterator <?> enteriterator =((map <?、?>)value).entryset()。iterator(); map <string、object> map = new hashmap <string、object>(); while(entriterator.hasnext()){entry <?、?> entrymap =(entry <?、?>)entryiterator.next(); if(entrymap.getValue()instanceof string []){map.put((string)entrymap.getKey()、getBean(((string [])entrymap.getValue())[0]); }} beanProcesser.setProperty(OBJ、Property、Map); }わかりました、だから私たちは私たちのためにクラスを作成するためにSpringを使用することができます。難しいですか?もちろん、春はこれ以上のことができます。この例プログラムは、Springの最もコア依存関係の注入関数の一部のみを提供します。
この記事は多数の記事を参照しており、1つずつ感謝することはできません。ここでありがとう。著作権侵害をお詫び申し上げます。私はそれが誰にでも役立つことを願っています!
要約します
上記は、Spring IOCの原則の詳細な説明に関するこの記事のすべての内容であり、すべての人に役立つことを願っています。興味のある友達は引き続きこのサイトを参照できます:
SpringのIOC、AOP、コードの例についての簡単な理解
SpringのIOCシミュレーション実装の詳細な紹介
欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!