우선, 봄에 콩을 주입하는 방법을 배우려면 먼저 종속성 주입이 무엇인지 이해해야합니다. 종속성 주입은 다음을 나타냅니다. 호출 클래스가 제 3자가 특정 인터페이스의 구현 클래스의 구현 클래스의 종속성을 주입하여 특정 인터페이스의 구현 클래스에서 호출 클래스의 종속성을 제거합니다.
스프링 컨테이너에서지지되는 의존성 주입 방법에는 주로 속성 주입, 생성자 주입 및 공장 방법 주입이 포함됩니다. 다음 으로이 세 가지 종속성 주입 방법과 특정 구성 방법을 자세히 소개합니다.
1. 속성 주입
속성 주입은 setxxx () 메소드를 통해 Bean의 속성 값 또는 종속 객체를 주입하는 것을 의미합니다. 속성 주입 방법은 선택적이고 유연하기 때문에 실제 개발에서 가장 일반적으로 사용되는 주입 방법이기도합니다.
Spring은 먼저 Bean의 기본 생성자를 호출하여 Bean 객체를 인스턴스화 한 다음 반사 된 메소드를 통해 설정 메소드를 호출하여 속성 값을 주입합니다.
속성 주입은 Bean이 기본 생성자를 제공해야하며 주입 해야하는 특성에 대한 정해진 방법을 제공해야합니다.
팁 : 소위 기본 생성자, 즉 매개 변수가없는 생성자. 클래스에 사용자 정의 생성자가없는 경우 시스템 (JVM)은 매개 변수없이 기본 생성자를 자동으로 생성합니다. 매개 변수가있는 생성자가 클래스에서 명시 적으로 사용자 정의 된 경우 시스템은 기본 생성자를 자동으로 생성하지 않으며 매개 변수없이 생성자를 수동으로 추가해야합니다.
다음은 봄에 콩의 속성 주입 방법을 보여주는 예입니다.
사용자 클래스 작성 :
패키지 com.kevin.bean;/** * 클래스 테스트 Bean 속성 주입 방법을 만듭니다. public String getUserName () {return username; } public void setusername (String username) {this.username = username; }}구성 파일 :
<? xml 버전 = "1.0"alcoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans"xmlns : xsi = "http://ww.w.w3.org/2001/xmlschema-instance" xmlns : context = "http://www.springframework.org/schema/context"xsi : schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/schema/sprideans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!-Bean 정의는 여기-> <! </value id ="user name- <value> </value> </beans>
그중에서도 각 속성 값은 속성 태그에 해당하고 이름 속성 값은 클래스의 속성 이름입니다. Bean 구현 클래스에는 해당 구현 메소드 SetUserName ()이 있습니다.
팁 : Spring은 Bean에 Setter 메소드가 포함되어 있는지 확인하고 해당 속성 변수가 있는지 여부에 대한 특정 요구 사항을 제시하지 않습니다. 그러나 기존 규칙에 따라 해당 속성 변수를 설정해야합니다.
봄에 <property> 태그에 대한 명명 사양 :
일반적으로 Java 속성 변수 이름은 소문자로 시작하지만 특별한 의미가있는 영어 약어를 고려할 때 Java Bean은 대문자로 시작하는 가변 이름도 허용합니다. 그러나 다음 두 지점을 충족해야합니다.
속성 주입 방법의 경우 구성 파일에서만 보증을 제공 할 수 있지만 구문 수준에서 보증을 제공 할 수 없습니다. 현재 요구 사항을 더 잘 충족시키기 위해 생성자 주입을 사용해야합니다.
2. 생성자 주입
생성자 주입은 속성 주입 외에도 일반적으로 사용되는 또 다른 주입 방법입니다. 콩이 인스턴스화 될 때 필요한 속성이 설정되어 있으며 인스턴스화 후 사용될 수 있습니다.
생성자 주입을 사용하기위한 전제 조건은 Bean이 생성자에게 인수를 제공해야한다는 것입니다.
생성자 주입의 경우 구성 파일을 다음과 같은 방식으로 사용할 수 있습니다.
【유형별 매개 변수 입력 방법을 일치
Bean 코드 작성 :
package com.kevin.bean;/** * 유형별 매개 변수 일치하는 Bean 테스트 작성 * @Author Kevin */public class person {private String name; 개인 정수 시대; 공개 문자열 getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } public integer getage () {return age; } public void setage (정수 시대) {this.age = age; }}구성 파일 쓰기 :
<? xml 버전 = "1.0"alcoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans"xmlns : xsi = "http://ww.w.w3.org/2001/xmlschema-instance" xmlns : context = "http://www.springframework.org/schema/context"xsi : schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/schema/sprideans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!-bean 정의는 여기-> <! <bean id ="value> <value> <value> "> <value> </constructor-arg> <생성자-arg 유형 = "정수"> value> 20 </value> </constructor-arg> </beans>
Spring의 구성 파일은 요소 라벨 순서와 무관 한 구성 전략을 채택하므로 구성 정보의 확실성을 어느 정도 보장 할 수 있습니다.
그런 다음 Bean에서 생성자의 다중 유형 매개 변수가 동일하면 유형에 따라 매개 변수를 일치시켜 혼동을 유발할 수 있습니다. 현재 다른 방법이 필요합니다 : 인덱스에 따른 매개 변수 일치.
【인덱스에 따른 매개 변수 일치
Bean 코드 작성 :
package com.kevin.bean;/** * 색인 메소드에 Bean 테스트 및 매개 변수 작성 * @Author Kevin */public class 학생 {개인 문자열 이름; 개인 문자열 성별; 개인 이중 점수; 공개 학생 (문자열 이름, 문자열 성별, 이중 점수) {super (); this.name = 이름; this.gender = 성별; this.score = score; }}구성 파일은 다음과 같이 작성됩니다.
<? xml 버전 = "1.0"alcoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans"xmlns : xsi = "http://ww.w.w3.org/2001/xmlschema-instance" xmlns : context = "http://www.springframework.org/schema/context"xsi : schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/schema/sprideans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!-Bean 정의는 여기-> <!-구성 <학생" "학생"> index arg-arg-arg-Arg-Arg-Arg-Arg = "0. value = "kevin"> </constructor-arg> <생성자-arg index = "1"value = "male"> </constructor-arg> <constructor-arg index = "2"value = "66"> </bean> </beans>
팁 : 속성 주입 중에 Spring은 Java Bean의 사양에 따라 구성 속성 및 해당 세터 메소드를 결정하고 Java 반사 메커니즘을 사용하여 속성 주입을 완료하기 위해 속성 세터 메소드를 호출합니다. 그러나 Java 반사 메커니즘은 생성자의 매개 변수 이름을 기억하지 않으므로 생성자의 매개 변수 이름을 공식화하여 생성자를 구성 할 수 없으므로 매개 변수 유형 및 인덱스를 통해 생성자의 속성 주입 만 간접적으로 완료 할 수 있습니다.
【결합 된 사용 유형과 인덱스 매칭 매개 변수】
일부 복잡한 구성 파일에서는 생성자의 매개 변수 주입을 완료하기 위해 유형 및 인덱스를 동시에 사용해야합니다. 다음은 시연 할 예입니다.
콩 쓰기 :
package com.kevin.bean;/** * 유형 및 색인 매개 매개 변수를 함께 사용하기 위해 Bean 테스트 작성 * @author Kevin */public class 교사 {개인 문자열 이름; 개인 문자열 주소; 개인 이중 급여; 사적인 int 연령; 공개 교사 (문자열 이름, 문자열 주소, 이중 급여) {super (); this.name = 이름; address = 주소; this.salary = 급여; } 공개 교사 (문자열 이름, 문자열 주소, int age) {super (); this.name = 이름; address = 주소; this.age = age; }}이 클래스에는 두 개의 과부하 생성자가 있으며 모두 3 개의 매개 변수가 있습니다. 이 경우 유형 및 색인 메소드를 사용하면 요구 사항을 완료 할 수 없습니다. 현재 두 속성을 동시에 사용해야합니다.
구성 파일 :
<? xml 버전 = "1.0"alcoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans"xmlns : xsi = "http://ww.w.w3.org/2001/xmlschema-instance" xmlns : context = "http://www.springframework.org/schema/context"xsi : schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/schema/sprideans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!-Bean 정의는 여기-> <!-<bean id ="prector "> index =" ""0 = ""0 = ""0. <value> kevin </value> </constructor-arg> <constructor-arg index = "1"type = "string"> <value> value> </value> </constructor-arg> <constructor-arg index = "2"type = "int"> 20 </value> </constructor-arg> </beans>
초점은 실제로 세 번째 매개 변수의 유형에 중점을 두므로 구성 파일을 인덱스와 유형을 지정하여 스프링이 매개 변수를 주입 할 생성자를 알 수 있습니다.
팁 : 구성 파일에 추가하면 모호성 문제가 있습니다. 스프링 컨테이너는 정상적으로 시작할 수 있으며 오류를보고하지 않습니다. 일치하는 생성자를 무작위로 사용하여 Bean을 인스턴스화합니다. 무작위로 선택된 생성자는 사용자가 필요하지 않을 수 있으므로 프로그래밍시이 모호성을 피해야합니다.
【자체 유형 반사를 통해 매개 변수를 일치시킵니다.
Bean 생성자 파라미터의 유형이 식별 할 수있는 경우, Java 반사 메커니즘은 생성자의 주입이 유형 및 인덱스 정보를 제공하지 않더라도 생성자 파라미터의 유형을 얻을 수 있기 때문에 스프링은 여전히 생성자 정보의 주입을 완료 할 수 있습니다. 예를 들어, 다음 예에서는 관리자 클래스의 생성자의 매개 변수 유형을 구별 할 수 있습니다.
쓰기 관리자 클래스 :
package com.kevin.bean;/** * 자체 유형 반사를 통해 인수 일치하는 Bean 테스트를 작성하십시오 * @author Kevin * */public class manager {private String name; 개인 이중 급여; 개인 사람; 공공 관리자 (문자열 이름, 이중 급여, 사람) {super (); this.name = 이름; this.salary = 급여; this.person = person; }}구성 파일 쓰기 :
<? xml 버전 = "1.0"alcoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans"xmlns : xsi = "http://ww.w.w3.org/2001/xmlschema-instance" xmlns : context = "http://www.springframework.org/schema/context"xsi : schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/schema/sprideans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!-Bean 정의는 여기-> <!-<bean id ="manager "> <value> <value> </constructor-arg> <constructor-arg> <Ref bean = "user"/> </constructor-arg> <constructor-arg> <Ref bean = "person"/> </constructor-arg> </beans>
위의 방법은 생성자 파라미터의 주입을 구현할 수 있지만 문제 발생을 피하기 위해 명시 적 인덱스를 사용하고 유형을 사용하여 생성자 매개 변수 입력 정보를 구성하는 것이 좋습니다.
3. 공장 방법 주입
공장 방법은 응용 프로그램에서 자주 사용되는 설계 패턴이며 제어 역전 및 단일 인스턴스 설계 아이디어를 구현하는 주요 방법입니다. 공장 클래스는 하나 이상의 공장 클래스 인스턴스를 작성하는 책임이 있습니다. 공장 클래스 메소드는 일반적으로 대상 클래스 인스턴스를 인터페이스 또는 추상 클래스 변수의 형태로 반환합니다.
공장 클래스는 대상 클래스의 인스턴스화 단계를 외부 적으로 차단하며 발신자는 특정 대상 클래스의 내용을 지정할 필요조차 없습니다. 스프링 컨테이너는 프레임 워크 방법에서 공장 방법의 기능을 제공하고 투명한 방식으로 개발자에게 공개되기 때문입니다. 따라서 엔지니어링 방법을 수동으로 작성할 필요는 없습니다. 그러나 일부 레거시 시스템 또는 타사 라이브러리에서는 엔지니어링 방법이 여전히 발생합니다. 현재 스프링 공장 주입 방법을 사용하여 스프링을 주입 할 수 있습니다.
스프링 공장 주입 방법은 정적 및 비 정적으로 나눌 수 있습니다.
【비 정적 공장 방법】
일부 공장 방법은 정적이 아니며 공장 방법을 호출하기 전에 인스턴스화해야합니다. 다음은 입증해야 할 예입니다.
공장 수업 작성 :
Package com.kevin.ctoryBean;/** * 공장 수업 테스트 비 정적 공장 메소드 주입 * @Author Kevin */public class bookfactory {public book buybook () {Book Book = New Book (); book.setName ( "자바에서 생각"); 반환 책; }}구성 파일 쓰기 :
<? xml 버전 = "1.0"alcoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans"xmlns : xsi = "http://ww.w.w3.org/2001/xmlschema-instance" xmlns : context = "http://www.springframework.org/schema/context"xsi : schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/schema/sprideans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!-bean 정의는 여기-> <! <! book factory"> </bean ""book " Factory-Method = "Buybook"> </bean> </beans>
BookFactory의 공장 방법은 정적이 아니기 때문에 먼저 공장 클래스의 Bean을 정의한 다음 공장 콩 속성을 통해 공장 Bean 인스턴스를 참조해야합니다. 그런 다음 해당 공장 메드를 사용하여 해당 공장 방법을 지정합니다.
【정적 공장 방법】
많은 공장 수업 방법은 정적이며 공장 수업 인스턴스를 만들지 않고 공장 수업 방법을 호출 할 수 있습니다. 따라서 정적 엔지니어링 방법은 비 정적 공장 방법보다 더 편리하고 간결합니다. 다음은 정적 공장 방법을 보여주는 예입니다.
공장 수업 작성 :
패키지 com.kevin.factoryBean;/** * 공장 수업 테스트 정적 공장 방법 주입 * @Author Kevin */public class carfactory {public static car createcar () {Car Car = New Car (); car.setbrand ( "람보르기니"); 반환 자동차; }}구성 파일 쓰기 :
<? xml 버전 = "1.0"alcoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans"xmlns : xsi = "http://ww.w.w3.org/2001/xmlschema-instance" xmlns : context = "http://www.springframework.org/schema/context"xsi : schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/schema/sprideans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!-bean 정의는 여기-> <! <! bean id ="creator "> createcar"> </bean> "> </bean>.
요약
Spring은 세 가지 선택적 주입 방법을 제공하지만 실제 응용 분야에서는 주입 방법을 선택 해야하는 통합 표준이 없습니다. 다음은 다음을 참조해야 할 몇 가지 이유입니다.
생성자 주입 이유 :
속성 주입 이유 :
실제로 Spring은 매개 변수를 주입하기위한 많은 방법을 제공하므로 이러한 방법에는 고유 한 이유가 있어야합니다. 각 방법은 특정 문제에서 고유 한 장점이 있습니다. 특정 사용 요구에 따라 적절한 방법 만 선택하면되지만 공장 방법 주입은 일반적으로 권장되지 않습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.