1。依存関係注射(DI)
依存関係は非常に深いように聞こえますが、実際には次のとおりです。属性に値を割り当てます。合計で2つの方法があります。 1つ目はコンストラクターパラメーターの形式で、もう1つは設定方法の形式です。
1つのコンストラクターインジェクション
1コンストラクターを使用して注入します
XMLを使用した注入方法
A.パラメーターの順序
<constructor-arg index = "0"> <value> Zhang san </value> </constructor-arg>
<constructor-arg index = "1"> <value> 56 </value> </constructor-arg>
B.パラメーターのタイプ
<constructor-arg type = "java.lang.integer"> <value> 56 </value> </constructor-arg>
<constructor-arg type = "java.lang.string"> <balue> zhang san </value> </constructor-arg>
具体的な例
パラメーターを今すぐパーソンクラスに注入したい場合は、学生は別のクラスです。
パブリッククラスの人{private string pid;プライベート文字列名;私立学生学生;パブリックパーソン(文字列pid、学生学生){this.pid = pid; this.student = desutent; } public Person(string pid、string name){this.pid = pid; this.name = name; }}ApplicationContext.xmlを構成します。パラメーター構成が実行されない場合、エラーが報告され、対応するコンストラクターが見つかりません。対応するパラメーターが構成されている場合、対応するコンストラクターをクラスで宣言する必要があります。
<?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/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id = "人直接クラスのコンストラクターは、パラメーターの角度マークです。パラメーターのタイプ値。基本プロパティの場合、この割り当てrefを使用して、型を参照してください。> <constructor-arg index = "0" type = "java.lang.string" value = "aaa"> </constructor-arg> <constructor-arg> <constructor-arg> <constructor-arg> <constructor-arg> <constructor-arg> </bean> <bean id = "sudent"> </bean> </bean>
テストクラスdixmlconstructortestを作成し、ブレークポイントのデバッグを実行します。構成パラメーターによれば、入力されたコンストラクターは人(String PID、学生学生)であることがわかります。
public class dixmlconstructortest {@test public void test1(){applicationContext context = new classpathxmlapplicationContext( "ApplicationContext.xml"); Person person =(person)context.getBean( "person"); }}2プロパティセッターメソッドを使用した2注入
XMLを使用した注入方法:
A.単純な豆の注入シンプルビーンズには、パッケージングタイプと弦の2つのタイプが含まれます。
<bean id = "personservice"> <! - 基本タイプ、文字列タイプ - > <プロパティname = "age" value = "20"> </property name = "name" value = "zhang wuji"> </property> </bean>
B.他の豆を引用します
<bean id = "person" /> <bean id = "personservice"> <プロパティ名= "person" ref = "person" /> < /bean>
1.1アセンブリリストコレクション
<プロパティ名= "lists"> <list> <value> list1 </value> <value> list2 </value> <ref bean = "person"/> </list> </property>
1.2アセンブリセットコレクション
<プロパティ名= "sets"> <set> <value> list1 </value> <value> list2 </value> <ref bean = "person"/> </set> </property>
1.3アセンブリマップ
<プロパティ名= "Maps"> <Map> <entry key = "01"> <value> map01 </value> </entry> <entry key = "02"> <value> map02 </value> </entry> </map> </property>
マップ内の<エントリ>の値は、<list>および<set>の値と同じであり、有効な属性要素を作成できます。キー値は文字列でなければならないことに注意する必要があります。
1.4アセンブリプロパティ
<プロパティ名= "props"> <props> <prop key = "01"> prop1 </prop> <prop key = "02"> prop2 </prop> </props> </property>
具体的な例
1. 2つのオブジェクトを作成します
パッケージxgp.spring.demo; Import java.util.list; import java.util.map; import java.util.properties; import java.util.set; public class person {private string pid;プライベート文字列名;私立学生学生;プライベートリストリスト。プライベートセットセット。プライベートマップマップ;私有地のプロパティ。プライベートオブジェクト[]オブジェクト; public Person(){system.out.println( "new Person"); } // getter and setterメソッドを省略}パッケージXGP.SPRING.DEMO; Public Class Student {Public Student(){System.out.Println( "New Student"); } public void saks(){system.out.println( "desute"); }}ApplicationContext.xmlファイルを構成します
<?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/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!プロパティが参照タイプの場合、refを使用して値を割り当てます - > <bean id = "person" init-method = "init" lazy-init = "true"> <property name = "pid" value = "1"> </property name> <property name = "name" value = " <value> list2 </value> <ref bean = "sudent"/> </property> <property name = "sets"> <set> <balue> set1 </value> <value> set2 </value> <ref bean = "sudent"/> </set> </property name> <property name = "map"> <map> <entry key = "entry1"> <値> </</</< bean = "sudent"/> </entry> </map> </property> <property name = "properties"> <props> <! - 参照タイプは必要ありません - > <prop key = "prop1"> prop1 </prop key = "prop2"> prop2 </prop> </props> </property> <property name = "objecs </property> </bean> <bean id = "sudent"> </bean> </bean>
テストクラスdixmlsettertestを作成します
パッケージXGP.SPRING.TEST; Import org.junit.test; import org.springframework.context.applicationcontext; Import org.springframework.context.support.classpathxmlapplicationcontext;インポートxgp.spring.demo.person dixmlsetterttetted; 1。スプリングコンテナは何をしますか? (1)スプリングコンテナを起動* *(4)スプリングコンテナからオブジェクトを抽出し、オブジェクトのメソッドを呼び出します。 * 2。スプリングコンテナの実行順序は何ですか? */ @test public void test1(){applicationContext Context = new ClassPathxMLApplicationContext( "ApplicationContext.xml"); Person person =(person)context.getBean( "person"); System.out.println(person.getPid()); System.out.println(person.getName()); system.out.println(person.getLists()); System.out.println(person.getSets()); System.out.println(person.getMap()); System.out.println(person.getObjects()。length); }}/*1 wang wu [list1、list2、xgp.spring.demo.student@76a9b9c] [set1、set2、xgp.spring.demo.student@76a9b9c] {entry1 = map1、entry2 = map2} 2*/スプリングコンテナの実行順序
1.すべてはデフォルト設定です
2。学生を設定する(lazy-init = true)
3。人を設定する(lazy-init = true)
要約します
パラメーターを注入する2つの方法があります。コンストラクターは、対応するコンストラクターを書き込む必要があり、セッターは対応するセッターメソッドを生成する必要があり、デフォルトのコンストラクターが記述されます。
2.5 IOCとDIの重要性
これらを学んだ後、それを発見することの意味は何ですか?要件を説明するために、ドキュメント管理システムの例を書きましょう。下の図を参照してください
1。ドキュメントインターフェイスを書き込みます
public interface document {public void read(); public void write();}2。実装クラスのWordDocument、ExcelDocument、PDFDocumentを書き込みます
Public Class WordDocumentはdocument {public void read(){system.out.println( "word read"); } public void write(){system.out.println( "word write"); }}3.ドキュメントマネージャーシステムを作成します
public class documentmanager {private document document; public void setDocument(document document){this.document = document; } public documentmanager(){} public documentmanager(document document){super(); this.document = document; } public void read(){this.document.read(); } public void write(){this.document.write(); }}4.テストクラスのドキュメントテストを書きます
/*** IOCとDIを使用すると、完全なインターフェイス指向のプログラミングを実現できます** /public class documentTest { /*** document document = new WordDocument(); *このコード行は、特定のクラスが等記号の右側に表示されるため、完全にインターフェイス指向のプログラミングではありません*/ @test public void testdocument_nospring(){document document = new worddocument(); documentManager documentmanager = new DocumentManager(document); documentmanager.read(); documentmanager.write(); } /***コード側では、誰がドキュメントを実装するのかわかりません。これは、スプリング構成ファイル * <bean id = "documentmanager"> <! - document is a interface-> <property name = "document"> <! - worddocumentはドキュメントインターフェイスに割り当てられた実装クラスです - > <ref bean = "pdfdocument"/>> </property> </bean> classPathXMLApplicationContext( "ApplicationContext.xml"); documentManager documentmanager =(documentmanager)context.getBean( "DocumentManager"); documentmanager.read(); documentmanager.write(); }}上記から、スプリングを適用しないこととスプリングを適用することの違いがわかります
<! - documentManager、worddocument、exceldocument、pdfdocumentがspring containerに入れられます - > <bean id = "worddocument"> </bean> <bean id = "exceldocument"> </bean> <bean id = "pdfdocument"> </bean> <bean = "pdfdocument"> <bean> </bean <! - ドキュメントはインターフェイスです - > <プロパティ名= "document"> <! - worddocumentは実装クラスで、ドキュメントインターフェイスに割り当てられています - > <ref bean = "pdfdocument"/> </property> </bean>
Springを使用するには、特定の実装クラスに注意を払い、完全なインターフェイス指向のプログラミングを実装することなく、ApplicationContextで対応する<ref bean = "">オブジェクトを構成する必要があります。これが、Springが非常に多くのツールと統合できる理由です。
2.6 MVCインスタンスシミュレーションstructs2
要件の説明
プロジェクトディレクトリを作成します
コーディング:
1. DAOレイヤーを作成してPersonDaoインターフェイスを確立し、PersonDaoImplクラスを実装する
public interface persondao {public void saveerson();} public class persondaoimplはpersondaoを実装します{@override public void saverson(){system.out.println( "save person"); }}2。サービスレイヤー、PersonServiceインターフェイス、PersonServiceImplの実装クラスを確立する
public Interface personService {public void saveerson();} public class personserviceimplを実装する{private persondao persondao; public void setpersondao(pershdao persondao){this.persondao = persondao; } @Override public void saveperson(){this.persondao.saveperson(); }}3。アクション、Personactionクラスを作成します
パブリッククラスの人間{private personservice personservice; public void setPersOnservice(personservice personservice){this.personservice = personService; } public void saveperson(){this.personservice.saveperson(); }}4. ApplicationContext.xmlを構成します
<! - サービス、DAO、アクションクラスをスプリングコンテナに入れます - > <bean id = "persondao"> </bean> <bean id = "personservice"> <property name = "persondao"> <ref bean = "persondao"/> </> </property> </bean> <bean id = "personcertion" </property> </bean>
5.テストクラスのtestmvcを書き込みます
public class mvctest {@test public void testmvc(){applicationContext context = new classpathxmlapplicationContext( "applicationContext.xml"); PersonAction Personaction =(Personaction)Context.getBean( "Personaction"); personact.saveperson(); // save person}}上記の例は、春のインターフェイス指向プログラミングを明確に示しています。サービスレイヤーはDAOレイヤーのインターフェイスを呼び出すだけですが、DAOレイヤーの実装クラスに注意を払う必要はなく、アクションはサービスのインターフェイスを呼び出す必要がありますが、サービスの実装クラスに注意を払う必要はありません。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。