Spring 프레임 워 크: 주입 모드 상세 설명

10959 단어 프레임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. 두 가지 주입 방식 의 대비
주입 의 장점 은 다음 과 같 습 니 다.
  • 프로그램 개발 자 들 은 이해 하기 쉽 고 setter 방법 으로 의존 관 계 를 설정 하 는 것 이 더욱 직관 적 이 고 자 연 스 러 워 보인다.
  • 복잡 한 의존 관계 에 대해 구조 기 를 주입 하면 구조 기 가 너무 비대 해 읽 기 어렵다.또한 Spring 은 Bean 인 스 턴 스 를 만 들 때 의존 하 는 모든 인 스 턴 스 를 동시에 예화 해 야 하기 때문에 성능 이 떨 어 질 수 있 습 니 다.설정 주입 을 사용 하면 이런 문 제 를 피 할 수 있다.
  • 다 중 매개 변수의 구조 기 는 더욱 무 거 워 보일 것 이다
  • 구조 기의 장점 은 다음 과 같다.
  • 구조 주입 은 구조 기 에서 의존 관계 의 주입 순 서 를 결정 하고 우선 의존 하 는 우선 주입 을 결정 할 수 있다.
  • 의존 관계 에 변화 가 필요 없 는 빈 에 게 구조 기 가 더 유용 하 다.setter 방법 이 없 기 때문에 모든 의존 관 계 는 구조 기 에 설정 되 어 있 습 니 다.후속 코드 가 의존 관계 에 파 괴 될 까 봐 걱정 할 필요 도 없다.
  • 의존 관 계 는 구조 기 에서 만 설정 할 수 있 고 구성 요소 의 작성 자 만 구성 요소 의 의존 관 계 를 바 꿀 수 있 습 니 다.구성 요소 의 호출 자 에 게 구성 요소 내부 의존 관 계 는 완전히 투명 하고 높 은 내부 집적 원칙 에 더욱 부합된다.

  • 마지막 으로 설정 주입 을 위주 로 하고 구조 주입 을 보조 로 하 는 주입 전략 을 사용 하 는 것 을 권장 합 니 다.

    좋은 웹페이지 즐겨찾기