1. 의존성 주입 (DI)
의존성 주입은 매우 심오하게 들리지만 실제로는 다음과 같습니다. 속성에 값을 할당합니다. 총 두 가지 방법이 있습니다. 첫 번째는 생성자 매개 변수의 형태이고 다른 하나는 설정 방법의 형태입니다.
1 생성자 주입
1 생성자를 사용하여 주입합니다
XML을 사용한 주입 방법
A. 매개 변수 순서
<생성자 -ARG index = "0"> <value> Zhang San </value> </constructor-arg>
<생성자 -ARG index = "1"> <value> 56 </value> </constructor-arg>
B. 매개 변수 유형
<생성자 -ARG 유형 = "java.lang.integer"> <alue> 56 </value> </constructor-arg>
<생성자 -ARG 유형 = "java.lang.string"> <alue> Zhang San </value> </constructor-arg>
구체적인 예
지금 매개 변수를 개인 수업에 주입하려면 학생이 또 다른 수업입니다.
공개 계급 사람 {개인 문자열 PID; 개인 문자열 이름; 사생활 학생; 공개 사람 (문자열 pid, 학생 학생) {this.pid = pid; this.student = 학생; } 공개 사람 (문자열 pid, 문자열 이름) {this.pid = pid; this.name = 이름; }}ApplicationContext.xml을 구성하십시오. 매개 변수 구성이 수행되지 않으면 오류 가보고되고 해당 생성자를 찾을 수 없습니다. 해당 매개 변수가 구성되면 해당 생성자는 클래스에서 선언해야합니다.
<? xml 버전 = "1.0"alcoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans"xmlns : xsi = "http://ww.w.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 = "person"> <! 개인 클래스의 생성자는 매개 변수의 각도입니다. 매개 변수의 유형 값. 기본 속성 인 경우이 할당 참조를 사용하여 할당을 사용하여-> <생성자-arg index = "0"type = "java.lang.string"value = "aaa"> </constructor-arg> <constructor-arg index = "1"ref = "student"> </constructor-arg> </bean> <bean id = "person1"> <propertion1 "> value = "1"> </property> </bean> <bean id = "학생"> </bean> </beans>
테스트 클래스 dixmlconstructortest를 작성하고 중단 점 디버깅을 수행하십시오. 구성 매개 변수에 따르면 입력 한 생성자는 사람 (String PID, Student Student)입니다.
public class dixmlconstructortest {@test public void test1 () {ApplicationContext context = new ClassPathXmlApplicationContext ( "ApplicationContext.xml"); 개인 = (사람) context.getBean ( "사람"); }}2 속성 세터 방법을 사용한 주입
XML을 사용한 주입 방법 :
A. 간단한 콩 주입 간단한 콩에는 두 가지 유형이 포함됩니다 : 포장 유형과 줄
<bean id = "personservice"> <!-기본 유형, 문자열 유형-> <속성 이름 = "age"value = "20"> </property> <property name = "name"value = "zhang wuji"> </property> </bean>
B. 다른 콩을 인용하십시오
<bean id = "person" /> <bean id = "personservice"> <property name = "person"ref = "person" /> < /bean>
1.1 어셈블리 목록 수집
<property name = "lists"> <list> <value> list1 </value> <value> list2 </value> <Ref bean = "person"/> </list> </property>
1.2 어셈블리 세트 수집
<property name = "sets"> <set> <value> list1 </value> <value> list2 </value> <Ref bean = "person"/> </set> </property>
1.3 어셈블리 맵
<속성 이름 = "맵"> <map> <Entry Key = "01"> <value> map01 </value> </enterd> <Entry Key = "02"> value> map02 </value> </Entry> </map> </property>
맵에서 <ETTRICE>의 값은 <ist> 및 <set>의 값과 동일하며, 이는 유효한 속성 요소를 만들 수 있습니다. 키 값은 문자열이어야한다는 점에 유의해야합니다.
1.4 어셈블리 특성
<속성 이름 = "props"> <props> <prop key = "01"> prop1 </prop> <prop key = "02"> prop2 </prop2 </props> </property>
구체적인 예
1. 두 개의 물체 사람과 학생을 만듭니다
패키지 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 method} 생략} xgp.spring.demo 패키지; 공개 클래스 학생 {public student () {System.out.println ( "신규 학생"); } public void says () {system.out.println ( "학생"); }}ApplicationContext.xml 파일을 구성하십시오
<? xml 버전 = "1.0"alcoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans"xmlns : xsi = "http://ww.w.w3.org/2001/xmlschema-instance" xsi : schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd-2.5.xsd"> <!-스프링 컨테이너에 대한 부동산 가치를 설명하는 데 사용되는 사람과 학생을 봄 부동산에 설명하는 데 사용되었습니다. 속성이 참조 유형 인 경우 ref를 사용하여 값을 할당하십시오-> <bean id = "person"init-method = "init"lazy-init = "true"> <property name = "pid"value = "1"> </property> <property name = "name"value = "wang ermazi"> </property name = "studl"ref = "student"> <property name = lists "> <studs"> <value> <value> list2 </value> <ref bean = "student"/> </property> <속성 이름 = "sets"> <set> <value> set1 </value> <value> set2 </value> <ref bean = "student"/</set> </set> </sett> </property> <속성 이름 = "map"> <map> <altry an value> map1 </value> <lenet ky <lenet ky <lentry Key <lentry Key <lenetter> <lenetter> <lenet </entern> <lentry <entercy < " bean = "학생"/> </enter> </map> </propert> <속성 이름 = "Properties"> <props> <!-참조 유형이 필요 없음-> <prop1 "> prop1 </prop> <prop2"> prop2 </prop2 </props> <value> <value> <value> bb> <value> <value> <value> <value> <value> <value> <value> <value> <value> <value> <value>. </property> </bean> <bean id = "학생"> </bean> </beans>
테스트 클래스 DIXMLSETTERTEST를 작성하십시오
패키지 xgp.spring.test; import org.junit.test; import org.springframework.context.applicationcontext; import org.spramework.context.support.support.classpathxmlapplicationcontext; import xgp.spring.demo.person; public class dixmstertetest { /who * who * who * who * who * who * who * who * 1. 스프링 컨테이너는 무엇을합니까? (1) 스프링 컨테이너 시작* (2) 사람과 학생의 두 콩에 대한 개체를 만듭니다* (3) 속성의 이름 속성을 분석하고, 세터 메소드를 분류하고, 속성의* 값 또는 참조 속성을 구문 분석하고, 매개 변수를 세터 메소드에 전달하고, 반사 기술을 사용하여 값을 객체에 할당하십시오. * (4) 스프링 컨테이너에서 물체를 추출하고 물체의 방법을 호출하십시오. * 2. 스프링 컨테이너의 실행 순서는 얼마입니까? */ @test public void test1 () {ApplicationContext context = new ClassPathXmlApplicationContext ( "ApplicationContext.xml"); 개인 = (사람) context.getBean ( "사람"); 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 (). 길이); }}/*1 Wang Wu [list1, list2, xgp.spring.demo.student@76a9b9c] [set1, set2, xgp.spring.demo.student@76a9b9c] {Entry1 = map1, enter2 = map2} 2*/ 스프링 컨테이너의 실행 순서
1. 모두 기본 설정입니다
2. 학생 세트 (Lazy-Init = true)
3. 사람을 설정합니다 (Lazy-Init = true)
요약
매개 변수를 주입하는 두 가지 방법이 있습니다. 생성자는 해당 생성자를 작성해야하며, 세터는 해당 세터 메소드를 생성해야하며 기본 생성자가 기록됩니다.
2.5 IOC와 Di의 중요성
이것들을 배운 후, 그것을 발견 한 의미는 무엇입니까? 요구 사항을 설명하기 위해 문서 관리 시스템의 예를 작성해 봅시다. 아래 그림을 참조하십시오
1. 문서 인터페이스를 작성하십시오
공개 인터페이스 문서 {public void read (); public void write write ();}2. 구현 클래스 쓰기 WordDocument, ExcelDocument, PDFDocument
공개 클래스 wordDocument 구현 문서 {public void read () {System.out.println ( "Word read"); } public void write () {System.out.println ( "Word Write"); }}3. DocumentManager 시스템을 작성하십시오
공개 클래스 문서 관리자 {개인 문서 문서; public void setDocument (문서 문서) {this.document = document; } public d this.document = 문서; } public void read () {this.document.read (); } public void write () {this.document.write (); }}4. 테스트 클래스 문서 테스트를 작성하십시오
/*** IOC 및 DI를 사용하여 완전한 인터페이스 지향 프로그래밍을 달성 할 수 있습니다** /public class documentTest { /*** 문서 문서 = new WordDocument (); *이 코드 라인은 특정 클래스가 동일 부호의 오른쪽에 나타나기 때문에 완전히 인터페이스 지향적 인 프로그래밍이 아닙니다. DocumentManager DocumentManager = 새 DocumentManager (Document); DocumentManager.Read (); DocumentManager.write (); } /*** 코드 측면에서 누가 문서를 구현하는지 모르겠습니다. 이것은 스프링 구성 파일 * <bean id = "d classPathXmlApplicationContext ( "ApplicationContext.xml"); DocumentManager DocumentManager = (DocumentManager) Context.GetBean ( "DocumentManager"); DocumentManager.Read (); DocumentManager.write (); }}위에서, 우리는 스프링을 적용하지 않고 스프링을 적용하는 것의 차이를 볼 수 있습니다.
<!-DocumentManager, WordDocument, ExcelDocument, pdfdocument는 스프링 컨테이너에 넣습니다-> <bean id = "wordDocument"> </bean> <bean id = "엑셀 도코먼"> </bean> <bean id = "pdfdocument"> </bean> <bean> <bean> </bean> <pdfdocument "> <! <property name = "document"> <!-WordDocument는 문서 인터페이스에 할당 된 구현 클래스입니다-> <Ref Bean = "pdfdocument"/> </property> </bean>
Spring을 사용하면 특정 구현 클래스에주의를 기울이지 않고 완전한 인터페이스 지향 프로그래밍을 구현하지 않고 ApplicationContext의 해당 <ref bean = ""> 객체를 구성하면됩니다. 이것이 Spring이 많은 도구와 통합 할 수있는 이유입니다.
2.6 MVC 인스턴스 시뮬레이션 structs2
요구 사항 설명
프로젝트 디렉토리를 만듭니다
코딩 :
1. Persondao 인터페이스를 설정하고 Persondaoimpl 클래스를 구현하기 위해 DAO 레이어를 만듭니다.
public interface persondao {public void saveperson ();} public class persondaoimpl은 persondao {@override public void saveperson () {system.out.println ( "Save Person"); }}2. 서비스 계층, personservice 인터페이스 및 personserviceimpl 구현 클래스 설정
공공 인터페이스 personservice {public void saveperson ();} 공개 클래스 personserviceimpl은 personservice {private persondao persondao; 공개 void setpersondao (persondao persondao) {this.persondao = persondao; } @override public void saveperson () {this.persondao.saveperson (); }}3. 행동, 인물 행동 수업을 만듭니다
공공 계급 인물 {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 = "personaction">
5. 테스트 클래스 테스트 MVC를 작성하십시오
공개 클래스 mvctest {@test public void testmvc () {ApplicationContext context = new ClassPathXmlApplicationContext ( "ApplicationContext.xml"); 인물 적 성격 = (Personaction) context.getBean ( "Personaction"); personaction.saveperson (); // save person}}}위의 예는 스프링의 인터페이스 지향 프로그래밍을 명확하게 보여줍니다. 서비스 계층은 DAO 계층의 인터페이스 만 호출하면되지만 DAO 계층의 구현 클래스에주의를 기울일 필요는 없으며 작업은 서비스 인터페이스 만 호출하면 서비스의 구현 클래스에주의를 기울일 필요가 없습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.