Spring 프레임 워 크: 주입 모드 상세 설명
1. 의존 주입 이란 무엇 입 니까?
처음에 존 슨 은 자바 인 스 턴 스 협력 관 계 를 설정 파일 로 관리 하 는 방식 을 반전 제어 (Inversion of Control) 라 고 불 렀 다. 이 명 사 는 이해 하기 어렵 기 때문에 나중에 마 틴 은 다른 이름 을 지 었 다. 의존 주입 이다. 이름 은 다 르 지만 의 미 는 같 습 니 다. 어떤 자바 인 스 턴 스 (호출 자) 가 다른 자바 인 스 턴 스 (호출 자) 가 필요 할 때.예 를 들 어 1 + 2 의 값 을 계산 하기 위해 우 리 는 두 가지 유형 이 있 는데 A 와 B 가 있다.A 류 는 1, 2 의 값 을 저장 하고 B 류 는 1 + 2 를 계산 하 는 방법 add () 를 포함한다.우리 의 일반적인 방법 은 A 클래스 에서 새로운 B 의 인 스 턴 스 를 만 든 다음 이 인 스 턴 스 를 통 해 B 의 add () 방법 으로 결 과 를 얻 는 것 입 니 다. 그러나 주입 에 의존 하 는 모드 에서 B 종 류 를 만 드 는 과정 은 호출 자 A 에 의 해 이 루어 지지 않 아 도 됩 니 다. (그런 의미 에서 반전 을 제어 하 는 이름 이 있 습 니 다) B 를 만 드 는 작업 은 Spring 의 용기 에 맡 겨 진 다음 에 작성 자 (xml 설정 을 통 해 주입 작업 을 완성 합 니 다) 를 주입 하기 때문에 의존 주입 이 라 고도 합 니 다.
다음은 하나의 예 를 통 해 설명 한다. 한 사람 이 도끼 를 사용 해 야 한다 면. 원시 사회 에서 그 는 스스로 도끼 를 만들어 야 했다. 산업 사회 에서 그 는 도끼 공장 을 찾 은 후에 이 공장 에서 도끼 를 살 수 있다. 위대 한 공산주의 사회 에서 그 는 공장 을 찾 지 않 고 이 사회 가 그 에 게 (주입) 만 제공 하면 된다 (이 모델 은 주입 모델). 첫 번 째 모델 에서 문 제 는 분명 하 다.확장 성 이 떨 어 지고 결합 도가 높 습 니 다. 도끼 가 변화 할 때 (예 를 들 어 구조 방법 변화) 우 리 는 심지어 사람의 코드 를 수정 하여 작업 을 완성 해 야 합 니 다.그 다음은 사람과 도끼 의 직책 이 분명 하지 않다 는 것 이다.사람 에 게 도끼 의 기능 만 사용 하면 된다. 도끼 의 생 성 과정 에 관심 을 가 질 필요 가 없다. 그러나 이런 모델 에서 사람 은 자발적으로 '도끼' 를 만들어 야 한다. 이런 '도끼 만 들 기' 의 직책 이 많아 져 혼란 을 초래 했다. 두 번 째 모델 에서 도끼 와 결합 시 킬 수 있 지만 문 제 는 사람과 공장 이 가끔 함께 있 고 사람 은 공장 이 어디 에 있 는 지 주동 적 으로 정 해 야 한 다 는 것 이다. 세 번 째 모델 은 가장 이상 적 인 것 이다. 사람 은 도끼 가 어떻게 실현 되 는 지 전혀 신경 쓰 지 않 고 공장 이 어디에서 도끼 를 얻 는 지 찾 지 않 아 도 된다. '사회' 는 그 에 게 도끼 를 제공 할 것 이다. 그 는 도끼 의 기능 만 사용 하면 된다.인 스 턴 스 간 의존 관 계 를 확인 하 는 이 '사회' 용 기 는 LoC 용기 다.
2. 주입 에 의존 하 는 유형
의존 주입 은 보통 다음 과 같은 두 가지 가 있다.
2.1 설정 값 주입
LoC 용기 가 의존 하 는 인 스 턴 스 를 주입 하기 위해 속성 을 사용 하 는 setter 방법 을 말 합 니 다.다음은 하나의 절차 로 설명 한다.Person 인터페이스
public interface Person{
//
public void useAxe();
}
Axe 인터페이스
public interface Axe{
//Axe
public String chop();
}
이어서 돌도끼 류 를 실현 하 다
public class StoneAxe implements Axe{
public String chop(){
return " ";
}
}
도끼 를 쓰 는 중국어 류 를 실현 하 다.
public class Chinese implements Persion{
private Axe axe;
public void setAxe(Axe axe){
this.axe = axe;
}
public void useAxe(){
// axe chop()
System.out.println(axe.chop());
}
}
위의 Chinese useAxe () 방법 은 바로 우리 가 말 한 가장 전형 적 인 의존 관계, 즉 A 호출 B, B 호출 C 등 이다.여기 서 그 는 구체 적 인 Axe 인 스 턴 스 가 필요 하 다. 이 방법 을 사용 하려 면 필요 하 다.
Chinese chinese = new Chinese();
chinese.setAxe(new StoneAxe());
chinese.useAxe();
Spring 프레임 워 크 에서 이 StoneAxe 인 스 턴 스 는 Spring 용기 에서 주입 을 담당 하고 bean. xml 파일 에 의존 하여 인 스 턴 스 간 의존 관 계 를 설정 합 니 다.이 파일 은 src 디 렉 터 리 에 있 습 니 다. 구체 적 으로 다음 과 같 습 니 다.
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
classpath:/org/springframework/beans/factory/xml/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
">
<bean id="chinese" class="com.weaver.Chinese">
<property name="axe" ref="stoneAxe"/>
bean>
<bean id="stoneAxe" class="com.weaver.StoneAxe"/>
beans>
속성 에 대한 설명 은 다음 과 같 습 니 다. id: 이 Bean 의 유일한 표지 입 니 다. 프로그램 은 id 속성 값 을 통 해 이 Bean 인 스 턴 스 를 방문 합 니 다. class: 이 빈 의 실현 클래스 를 지정 합 니 다.Spring 용 기 는 xml 해상도 기 를 사용 하여 이 속성 값 을 읽 고 반 사 를 이용 하여 이 구현 클래스 의 인 스 턴 스 를 만 듭 니 다.
Spring 은 인자 가 없 는 구조 기 를 호출 하여 기본 Bean 인 스 턴 스 를 만 든 후 해당 하 는 setter 방법 으로 프로그램 에 속성 값 을 주입 합 니 다.이 예 에서 property 태그 의 name 속성 에 대응 하 는 것 은 중국어 클래스 의 axe 개인 속성 입 니 다.
다음 주 프로그램 코드 에 서 는 Person 인 스 턴 스 를 간단하게 가 져 오고 이 인 스 턴 스 의 useAxe 방법 을 호출 합 니 다.
public class BeanTest{
public static void main(String[] args) throws Exception{
// Spring
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
// chinese
Person p = ctx.getBean("chinese", Person.class);
p.useAxe();
}
}
실행 결 과 는 다음 과 같다.
위의 프로그램 을 통 해 알 수 있 듯 이 Spring 용 기 는 거대 한 공장 으로 모든 유형의 Bean 인 스 턴 스 를 생산 할 수 있다. 프로그램 이 Bean 인 스 턴 스 를 가 져 오 는 방법 은 getBean () 입 니 다.이 인 스 턴 스 를 가 져 오 면 이 인 스 턴 스 를 사용 하면 특별한 점 이 없습니다.분석 프로그램 을 통 해 알 수 있 듯 이 useAxe () 방법 을 호출 할 때 Axe 인 스 턴 스 가 필요 하지만 프로그램 은 특정한 Person 인 스 턴 스 와 Axe 인 스 턴 스 를 결합 시 키 지 않 았 습 니 다. Axe 인 스 턴 스 는 Spring 이 실행 하 는 동안 주입 되 었 습 니 다.Person 인 스 턴 스 는 Axe 인 스 턴 스 의 구체 적 인 실현 을 알 필요 가 없 을 뿐만 아니 라 Axe 인 스 턴 스 의 생 성 과정 도 알 필요 가 없습니다. 미래의 어느 날 을 가정 하면 우 리 는 도끼 를 강철 도끼 로 바 꾸 는 등 Axe 의 실현 을 바 꿔 야 한다.대응 하 는 것 은 bean. xml 만 수정 하면 완 성 됩 니 다.변화 하 는 과정 에서 알 수 있 듯 이 chinese 인 스 턴 스 는 구체 적 인 Axe 실현 류 와 아무런 관계 가 없다. chinese 인 스 턴 스 는 Axe 인터페이스 와 만 결합 하면 chinese 인 스 턴 스 와 Axe 인 스 턴 스 간 의 소나무 결합 을 확보 할 수 있다. 이것 도 Spring 이 인터페이스 프로 그래 밍 을 강조 하 는 원인 이다.
2.2 구조 주입
구조 가 구조 인 스 턴 스 에 주입 되 었 을 때 의존 관계 의 초기 화 를 완성 했다.구조 기 를 이용 해 의존 관 계 를 설정 하 는 방식 을 구조 주입 이 라 고 한다.
앞의 chinese 류 를 다음 과 같이 약간 수정 하여 두 개의 구조 기 를 추가 합 니 다.
public class chinese implements Person{
private Axe axe;
public chinese(){
}
public chinese(Axe axe){
this.axe = axe;
}
public void useAxe(){
System.out.pringln(axe.chop());
}
}
이와 함께 앞의 bean. xml 파일 의
탭 의 내용 을 다음 과 같이 수정 합 니 다.<bean id="chinese" class="com.SpringTest.Chinese">
<constructor-arg ref="stoneAxe"/>
bean>
이렇게 해서 구조 주입 이 완성 되 었 다.그 중에서
요 소 는 구조 기 인 자 를 지정 하고 이 매개 변 수 는 Axe 입 니 다.Spring 은 Chinese 클래스 에 Axe 인자 가 있 는 구조 기 를 호출 하여 chinese 인 스 턴 스 를 만 듭 니 다.3. 두 가지 주입 방식 의 대비
주입 의 장점 은 다음 과 같 습 니 다.
마지막 으로 설정 주입 을 위주 로 하고 구조 주입 을 보조 로 하 는 주입 전략 을 사용 하 는 것 을 권장 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
node.js 파충류 프레임워크 node-crawler 첫 체험바이두 파충류라는 단어는 일반적으로 나타나는python 관련 자료이다. py에도 파충류 프레임이 많은데, 예를 들면 scrapy, Portia, Crawley 등이다. 이전에는 개인적으로 C#로 파충류를 만드는 것을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.