Spring学習(三)——Springにおける依存注入の方式
40270 ワード
【先の話】
Springは私にとってとても重要で、web関連のプロジェクトについてすべてSpringを使って、毎回Spring関連の知識を見に行って、いつも1知半解を感じて、とても良いシステムが勉強していないで、今少し時間を割いてSpringを勉強します.なぜかSpringに何となく好きになったのは、彼の名前のせいか、希望的な感じがしたからかもしれません.
Spring学習中のまとめと心得,本稿では依存注入とAOPについて学習した後,依存注入の仕方を引き続き学習し,選択的に読んでください.
本文は家畜TTがブログ園で初めて発表し、転載は文章の完全性を維持し、著者:家畜TTを明記してください.リンク:http://www.cnblogs.com/xt0810/p/3628402.html
【関連記事】
Spring学習(一)——Springにおける依存注入の概要
Spring学習(二)——SpringにおけるAOPの初歩的な理解
【依存注入方式】
前の2つの文章の中で、何が注入に依存しているのか、何がAOPなのかを学びました.もちろん、その2つの文章もただ何が問題なのかを紹介しているだけです.私は勉強を通じて、どのようにしているのかを理解したいと思っています.依存注入とは何かまだ理解していない場合は、前の2つの文章を読んだほうがいいです.
1.注入依存方式:
1)設定値注入:IOCコンテナは属性のsetterメソッドを用いて依存するインスタンスを注入する.
2)構造注入:IOCコンテナはコンストラクタを用いて依存するインスタンスを注入する.
3)静的プラント注入:IOC容器は静的プラント法を用いて依存する事例を注入する.
4)インスタンスファクトリ注入方式:IOCコンテナはインスタンスファクトリ手法を用いて依存するインスタンスを注入する.
2.setter注入:
主なコードは以下の通りです.完全なコードは【4つのdemo】を参照してください. Setterのこのような形式の注入の中で、Personクラスは彼がインスタンス化するCarクラス、つまり具体的なクラスAuDiクラスがどこにあるか分からない.彼はインタフェースCarを呼び出しただけで、具体的なインスタンス化はSpringによって行われた. テストでは、MainTestクラスはそれぞれ従来の方法、すなわちSpringを使用しない場合を書き、比較することで、実際には次の等価性を発見することができる:
上下等価:
1) Person.java
2) MainTest.java
3) cartest.xml
3.構造注入:
主なコードは以下の通りです.完全なコードは【4つのdemo】を参照してください.構造注入では,Personクラスはインスタンス化するCarクラス,すなわち具体的なクラスAuDiクラスがどこにあるかを知らず,インタフェースCarを呼び出しただけで,具体的なインスタンス化はSpringによって行われた. テストでは、MainTestクラスはそれぞれ従来の方法、すなわちSpringを使用しない場合を書き、比較することで、実際には次の等価性を発見することができる:
上下等価:
1) Person.java
2) MainTest.java
3) cartest.xml
4.静的工場注入:
主なコードは以下の通りです.完全なコードは【4つのdemo】を参照してください.
MainTestクラスではSpringを使うのと使わないの違いがわかります.
1) CarFactory.java
2) MainTest.java
3) cartest.xml
5.実例工場注入:
主なコードは以下の通りです.完全なコードは【4つのdemo】を参照してください.
MainTestクラスではSpringを使うのと使わないの違いがわかります.
1) CarFactory.java
2) MainTest.java
3) cartest.xml
【4つのdemo】
1.Spring依存注入setterを用いて注入demoを設定
2.Spring依存注入使用構成注入demo
3.Spring依存注入静的工場設置注入demo
4.Spring依存注入使用例工場設置注入demo
【ネーミングスペース】
『Spring実戦』ではSpringに対して多くのXMLネーミングスペースを持っており、主に以下の通りである.
ネーミングスペース
用途
aop
断面を宣言するクラスエージェントと@AspectJ注記をSpring断面の構成要素
beans
宣言BeanとアセンブリBeanをサポートし、Springの最も核心であり、最も原始的なネーミングスペースである.
context
Springアプリケーションコンテキストの構成には、Beanの自動検出と自動アセンブリ、Springzhujie以外の注入などの構成要素が用意されています.
jee
Java EE APIとの統合、例えばJNDIとEJB
jms
メッセージドライバを宣言するPOJOの構成要素
lang
Groovy、JRuby、貨物BeanShellなどのスクリプトによるBeanの構成をサポート
mvc
Spring MVCの機能を有効にします.たとえば、注釈向けコントローラ、ビューコントローラ、ブロッカーなどです.
oxm
SpringをサポートするオブジェクトからXMLへのマッピング構成
tx
宣言試行トランザクション構成の提供
util
コレクションをBeanに構成し、プロパティプレースホルダ要素をサポートするなど、さまざまなツールクラス要素を提供します.
【参考資料】
1.『Spring in action』Craig Walls著耿淵張衛浜訳
2.『軽量級Java EE企業応用実戦』李剛著
【後ろの話】
时には自分の勉强が速いと感じて、时には自分の勉强のリズムが遅いことに気づいて、よく努力してもっと多くの技能を学ぶことができることを望んでいます.
共有:
芭蕉は丁香結を伸ばさず,同じように春風にそれぞれ心配している.
——TT
Springは私にとってとても重要で、web関連のプロジェクトについてすべてSpringを使って、毎回Spring関連の知識を見に行って、いつも1知半解を感じて、とても良いシステムが勉強していないで、今少し時間を割いてSpringを勉強します.なぜかSpringに何となく好きになったのは、彼の名前のせいか、希望的な感じがしたからかもしれません.
Spring学習中のまとめと心得,本稿では依存注入とAOPについて学習した後,依存注入の仕方を引き続き学習し,選択的に読んでください.
本文は家畜TTがブログ園で初めて発表し、転載は文章の完全性を維持し、著者:家畜TTを明記してください.リンク:http://www.cnblogs.com/xt0810/p/3628402.html
【関連記事】
Spring学習(一)——Springにおける依存注入の概要
Spring学習(二)——SpringにおけるAOPの初歩的な理解
【依存注入方式】
前の2つの文章の中で、何が注入に依存しているのか、何がAOPなのかを学びました.もちろん、その2つの文章もただ何が問題なのかを紹介しているだけです.私は勉強を通じて、どのようにしているのかを理解したいと思っています.依存注入とは何かまだ理解していない場合は、前の2つの文章を読んだほうがいいです.
1.注入依存方式:
1)設定値注入:IOCコンテナは属性のsetterメソッドを用いて依存するインスタンスを注入する.
2)構造注入:IOCコンテナはコンストラクタを用いて依存するインスタンスを注入する.
3)静的プラント注入:IOC容器は静的プラント法を用いて依存する事例を注入する.
4)インスタンスファクトリ注入方式:IOCコンテナはインスタンスファクトリ手法を用いて依存するインスタンスを注入する.
2.setter注入:
主なコードは以下の通りです.完全なコードは【4つのdemo】を参照してください.
1 <bean id="person" class="Person">
2 <property name="car" ref="auDi" />
3 </bean>
4 <bean id="auDi" class="AuDi" />
上下等価:
1 Person person=new Person();
2 AuDi audi=new AuDi();
3 person.setCar(audi);
1) Person.java
1 public class Person {
2
3 private Car car;
4
5 public void setCar(Car car){
6 this.car =car;
7 }
8
9 public void driver(){
10 car.GuaDang();
11 car.CaiYouMen();
12 car.DaFangXiang();
13 }
14 }
2) MainTest.java
1 import org.springframework.context.ApplicationContext;
2 import org.springframework.context.support.ClassPathXmlApplicationContext;
3 public class MainTest {
4 public static void main(String[] args){
5 //setter
6 // Spring
7 ApplicationContext context = new ClassPathXmlApplicationContext("cartest.xml");
8 Person boy =(Person) context.getBean("person");
9 boy.driver();
10
11 //
12 /*Person person=new Person();
13 AuDi audi=new AuDi();
14 person.setCar(audi);
15 person.driver();*/
16 }
17 }
3) cartest.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns:p="http://www.springframework.org/schema/p"
5 xmlns:context="http://www.springframework.org/schema/context"
6 xsi:schemaLocation="http://www.springframework.org/schema/beans
7 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
8 http://www.springframework.org/schema/context
9 http://www.springframework.org/schema/context/spring-context-3.0.xsd">
10 <bean id="person" class="Person">
11 <property name="car" ref="auDi" />
12 </bean>
13 <bean id="auDi" class="AuDi" />
14 </beans>
3.構造注入:
主なコードは以下の通りです.完全なコードは【4つのdemo】を参照してください.
1 <bean id="person" class="Person">
2 <constructor-arg ref="Car" />
3 </bean>
4 <bean id="Car" class="AuDi" />
上下等価:
1 AuDi audi=new AuDi();
2 Person person=new Person(audi);
1) Person.java
1 public class Person {
2 private Car car;
3 public Person(Car car){// , car,
4 this.car =car;// , 。
5 }// Person , Person , , Car 。 , Person 。
6
7 public void driver(){
8 car.GuaDang();
9 car.CaiYouMen();
10 car.DaFangXiang();
11 }
12 }
2) MainTest.java
1 import org.springframework.context.ApplicationContext;
2 import org.springframework.context.support.ClassPathXmlApplicationContext;
3 public class MainTest {
4 public static void main(String[] args){
5 ApplicationContext context = new ClassPathXmlApplicationContext("cartest.xml");
6 Person boy =(Person) context.getBean("person");
7 boy.driver();
8 }
9 }
3) cartest.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns:p="http://www.springframework.org/schema/p"
5 xmlns:context="http://www.springframework.org/schema/context"
6 xsi:schemaLocation="http://www.springframework.org/schema/beans
7 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
8 http://www.springframework.org/schema/context
9 http://www.springframework.org/schema/context/spring-context-3.0.xsd">
10 <bean id="person" class="Person">
11 <constructor-arg ref="Car" />
12 </bean>
13 <bean id="Car" class="AuDi" />
14 </beans>
4.静的工場注入:
主なコードは以下の通りです.完全なコードは【4つのdemo】を参照してください.
MainTestクラスではSpringを使うのと使わないの違いがわかります.
1) CarFactory.java
1 public class CarFactory {
2 public static Car getCarInstance(String type){// , CarFactory ,getCar 。
3 Car carInstance = null;
4 if(type.equals("audi")){
5 carInstance=new AuDi();
6 }else if(type.equals("baoma")){
7 carInstance=new BaoMa();
8 }
9 return carInstance;
10 }
11 }
2) MainTest.java
1 import org.springframework.context.ApplicationContext;
2 import org.springframework.context.support.ClassPathXmlApplicationContext;
3 import org.springframework.beans.factory.xml.XmlBeanFactory;
4
5 public class MainTest {
6 public static void main(String[] args){
7 // Spring
8 // , .
9 /*Car audicar=CarFactory.getCarInstance("audi");
10 audicar.Prepare();
11 audicar.Install();
12 audicar.Color();
13 Car baomacar=CarFactory.getCarInstance("baoma");
14 baomacar.Prepare();
15 baomacar.Install();
16 baomacar.Color();*/
17
18 // Spring
19 // , .
20 ApplicationContext context = new ClassPathXmlApplicationContext("cartest.xml");
21 Car caraudi =(Car) context.getBean("audi");
22 caraudi.Prepare();
23 caraudi.Install();
24 caraudi.Color();
25 Car carbaoma =(Car) context.getBean("baoma");
26 carbaoma.Prepare();
27 carbaoma.Install();
28 carbaoma.Color();
29 }
30 }
3) cartest.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns:p="http://www.springframework.org/schema/p"
5 xmlns:context="http://www.springframework.org/schema/context"
6 xsi:schemaLocation="http://www.springframework.org/schema/beans
7 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
8 http://www.springframework.org/schema/context
9 http://www.springframework.org/schema/context/spring-context-3.0.xsd">
10 <bean id="audi" class="CarFactory" factory-method="getCarInstance">
11 <constructor-arg>
12 <value>audi</value>
13 </constructor-arg>
14 </bean>
15 <bean id="baoma" class="CarFactory" factory-method="getCarInstance">
16 <constructor-arg>
17 <value>baoma</value>
18 </constructor-arg>
19 </bean>
20 </beans>
5.実例工場注入:
主なコードは以下の通りです.完全なコードは【4つのdemo】を参照してください.
MainTestクラスではSpringを使うのと使わないの違いがわかります.
1) CarFactory.java
1 public class CarFactory {
2 public Car getCarInstance(String type){//
3 Car carInstance = null;
4 if(type.equals("audi")){
5 carInstance=new AuDi();
6 }else if(type.equals("baoma")){
7 carInstance=new BaoMa();
8 }
9 return carInstance;
10 }
11 }
2) MainTest.java
1 import org.springframework.context.ApplicationContext;
2 import org.springframework.context.support.ClassPathXmlApplicationContext;
3 import org.springframework.beans.factory.xml.XmlBeanFactory;
4
5 public class MainTest {
6 public static void main(String[] args){
7
8 // Spring
9 // , 。
10 /*CarFactory carfactory =new CarFactory();
11 Car audicar=carfactory.getCarInstance("audi");
12 audicar.Prepare();
13 audicar.Install();
14 audicar.Color();
15 Car baomacar=carfactory.getCarInstance("baoma");
16 baomacar.Prepare();
17 baomacar.Install();
18 baomacar.Color();*/
19
20 // Spring
21 // , 。
22 ApplicationContext context = new ClassPathXmlApplicationContext("cartest.xml");
23 Car caraudi =(Car) context.getBean("audi");
24 caraudi.Prepare();
25 caraudi.Install();
26 caraudi.Color();
27 Car carbaoma =(Car) context.getBean("baoma");
28 carbaoma.Prepare();
29 carbaoma.Install();
30 carbaoma.Color();
31 }
32 }
3) cartest.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns:p="http://www.springframework.org/schema/p"
5 xmlns:context="http://www.springframework.org/schema/context"
6 xsi:schemaLocation="http://www.springframework.org/schema/beans
7 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
8 http://www.springframework.org/schema/context
9 http://www.springframework.org/schema/context/spring-context-3.0.xsd">
10 <bean id="carfactory" class="CarFactory"/>
11 <bean id="audi" factory-bean="carfactory" factory-method="getCarInstance">
12 <constructor-arg>
13 <value>audi</value>
14 </constructor-arg>
15 </bean>
16 <bean id="baoma" factory-bean="carfactory" factory-method="getCarInstance">
17 <constructor-arg>
18 <value>baoma</value>
19 </constructor-arg>
20 </bean>
21 </beans>
【4つのdemo】
1.Spring依存注入setterを用いて注入demoを設定
2.Spring依存注入使用構成注入demo
3.Spring依存注入静的工場設置注入demo
4.Spring依存注入使用例工場設置注入demo
【ネーミングスペース】
『Spring実戦』ではSpringに対して多くのXMLネーミングスペースを持っており、主に以下の通りである.
ネーミングスペース
用途
aop
断面を宣言するクラスエージェントと@AspectJ注記をSpring断面の構成要素
beans
宣言BeanとアセンブリBeanをサポートし、Springの最も核心であり、最も原始的なネーミングスペースである.
context
Springアプリケーションコンテキストの構成には、Beanの自動検出と自動アセンブリ、Springzhujie以外の注入などの構成要素が用意されています.
jee
Java EE APIとの統合、例えばJNDIとEJB
jms
メッセージドライバを宣言するPOJOの構成要素
lang
Groovy、JRuby、貨物BeanShellなどのスクリプトによるBeanの構成をサポート
mvc
Spring MVCの機能を有効にします.たとえば、注釈向けコントローラ、ビューコントローラ、ブロッカーなどです.
oxm
SpringをサポートするオブジェクトからXMLへのマッピング構成
tx
宣言試行トランザクション構成の提供
util
コレクションをBeanに構成し、プロパティプレースホルダ要素をサポートするなど、さまざまなツールクラス要素を提供します.
【参考資料】
1.『Spring in action』Craig Walls著耿淵張衛浜訳
2.『軽量級Java EE企業応用実戦』李剛著
【後ろの話】
时には自分の勉强が速いと感じて、时には自分の勉强のリズムが遅いことに気づいて、よく努力してもっと多くの技能を学ぶことができることを望んでいます.
共有:
芭蕉は丁香結を伸ばさず,同じように春風にそれぞれ心配している.
——TT