봄 학습 콩 [] [] 기본 구성에 의해 조립 노트 (육) 콩 자세한 조립

콩에 의해 조립 노트

1. 소개

우월

1. XML 구성은 구성 항목의 수는, XML 구성이 너무 어려운 비 대한 프로젝트가 유지 될 수 있습니다 때, 줄일 수있다

2. 모두 XML 기능을 달성 할뿐만 아니라 자동으로 자동 조립을 사용하여 조립 할 수있는 기능을 제공하기 위해 더 강력한, 프로그램 원숭이 결정은 덜 할 필요가되며, 프로그램의 개발에 더 도움이 "합의 구성 "을 통해 개발 원칙

IOC는 콩의 두 가지 방법을 발견

구성 요소 스캔 : 방법에 의해 정의 된 자원은 Spring IoC 컨테이너 스캐닝하여 빈 어셈블리를 오는 패킷을 해당 할 수 있습니다.

자동 조립 : 주석의 정의에 의하면, 일부 종속성이 주석에 의해 같은 달성 될 수있다.

2 사용 어셈블리 콩 @Compoent

우리는 학생 수준의 변화에게 그것을하기 전에 만든 :

패키지 POJO; 

수입 org.springframework.beans.factory.annotation.Value;
수입 org.springframework.stereotype.Component; 

@Component (값 = "student1" )
 공용  클래스 학생 { 

    @Value ( "1" )
     의 INT ID; 
    @Value ( "student_name_1" ) 
    문자열 이름; 

    // getter 및 setter 
}

 설명 :

@Component 노트 :

  봄 IOC의 클래스는 빈 인스턴스로 스캔 할 것이다 나타내고, XML에 정의 된 콩 ID에 해당이 클래스 ID가 봄 속성을 대표하는의 값 : <콩 ID = "student1"클래스 = " pojo.Student는 "(student1") />, @Component로 축약 할 수있다 ", 또는 직접 기록 @Component, 쓰기,하지를 들어, Spring IoC 컨테이너는 ID로 이름에 클래스 이름을 기본값으로 사용합니다,하지만 첫 글자를 소문자, 구성 컨테이너에.

@Value 노트 :

  XML 속성에 기록 된 값으로, 값으로 채워졌다하는 것은 동일합니다.

    음, 그래서 우리는 우리가 콩을 만들려면, 단지 XML이 문장을 쓴 선언

< 이름 = "student1 「클래스 ="pojo.Student " > 
    < 속성 ="ID " ="1 "  /> 
    < 속성 이름 ="이름 " ="student_name_1 " /> 
</ >

   하지만 지금 우리는 클래스를 선언하고, 봄 IOC는이 콩의 존재를 알 수 없어, 우리는 스프링의 IoC를 알려줄 수있는 StudentConfig 클래스를 사용할 수있는이 시간을 어떤 테스트를 수행 할 수 없습니다 :

패키지 POJO;
수입 org.springframework.context.annotation.ComponentScan; 

@ComponentScan 
공공  클래스 StudentConfig { 
}

이 클래스는 논리없이 매우 간단하지만,이 점은주의해야한다 :

1, 같은 클래스와 학생 클래스 패키지 이름

2, ComponentScan 노트 @

대표 스캔은 스캔이 @Component 모든 주석을 POJO를 스캔, 현재 패키지의 기본 경로입니다.

  그 결과, 우리는 IoC 컨테이너를 생성하는 봄의 IoC 컨테이너 봄 --AnnotationConfigApplicationContext을 통해 좋은 구현하는 클래스를 정의 할 수 있습니다 :

ApplicationContext의 컨텍스트 = 새로운 AnnotationConfigApplicationContext (StudentConfig. 클래스 ); 
학생 학생 = (학생) context.getBean ( "student1", 학생. 클래스 ); 
student.printInformation ();

  다음은 클래스 Spring IoC 컨테이너를 초기화하는 데 사용되는 AnnotationConfigApplicationContext을 볼 수 있습니다, 그것은 StudentConfig 구성 항목 클래스, 그래서 자원이 IoC 컨테이너를 생성, 주석에 따라 구성에 해당 해결하기 위해 IOC의 봄 것입니다.

명백한 단점 :

  • @ComponentScan 노트를 들어, 그냥 패키지,하지만 더 자주 우리는 우리가 지정된 클래스를 스캔 할 수 있기를 바랍니다 자바 클래스를 검색
  • 위의 예는 단순한 주사 값 테스트가, 객체가 주석을 통해 주입 될 수있다 발견되었다 @Value

@Component는 두 가지 구성 항목이 노트 :

basePackages : 패키지 또는 자바 어레이 패키지 구성 될 수 있음을 의미하는 복수를 사용하면서 기재 두 단어의 패키지이며, 스프링은 빈으로 구성 될 해당 패키지 서브 패키지에 기초하여 상기 검사를 구성 할 조립 올

basePackageClasses는 : 그것은 복수의 클래스를 구성 할 수 있다는 것을 의미 세 즉, 복합체의 용도로 이루어지는베이스, 패키지 및 클래스 구성, 스프링 기반 구성 곳 잡화, 해당 패킷 및 서브 패킷에 대해 구성된 콩 주사 어셈블리를 수행

이제 위의 두 가지 구성 항목을 확인 재건 StudentConfig 클래스 전에 작성 해보자 :

패키지 POJO;
수입 org.springframework.context.annotation.ComponentScan; 

@ComponentScan (basePackages = "POJO" )
 공개  수업 StudentConfig { 
} 

//   ------------------ 【宇宙超级无敌分割线】 --------- --------- 
패키지 POJO; 

수입 org.springframework.context.annotation.ComponentScan; 

@ComponentScan (basePackageClasses = pojo.Student. 클래스 )
 공공  클래스 StudentConfig { 
}

basePackages [] 및 [] basePackageClasses 선택 질문의 경우 :

  이 프로젝트는 [basePackages]을 사용하지 않는 시도, 그것을 사용하는 우선 순위를 부여하지만, 리모델링 프로젝트를 많이 필요 있도록 재구성 자주 반복적으로 패키지 이름을 수정해야하기 때문에 [BasePackages] 가독성이 더 나은 것 구성 및 IDE는 당신에게 힌트를주고, [] basePackageClasses 오류 메시지를 사용하지 않습니다.

3, 자동 조립 - @를 autowire

정의 : 봄이 자동으로 (작업 방법을 조립, 해당 Bean을 찾을 유형을 찾을 수 )

분석의 예 :

1. 패키지 [서비스] 아래 StudentService 인터페이스를 만들 :

패키지 서비스; 

공중  인터페이스 StudentService {
     공개  공극 printStudentInfo (); 
}

추신 : 사용하기 쉬운 인터페이스 봄은 좀 더 유연하게 할 수 있고, 분리를 달성하기 위해 정의 할 수 있도록 권장되는 방법입니다

2. 위의 인터페이스는 StudentServiceImp 구현 클래스를 만들 수 있습니다 :

@Component ( "studentService은") // 빈 인스턴스로 스캔이 클래스 (약칭, 괄호 안의 XML 구성 ID로 시간 상당) IOC의를 나타냅니다 
공공  클래스 StudentServiceImp 구현 StudentService { 

    @Autowired // 봄을 그는 빈 발견 조립 
    개인 학생 학생 = 널 (null) ; 

    공공  무효 printStudentlnfo () { 
        에서 System.out.println ( "학생 ID가 있습니다 :"+ student.getName ()); 
        에서 System.out.println ( "학생의 이름은 :"+ 학생. getName ()); 
    } 
}

3. 테스트 클래스를 작성한다 :

// 단계 : 검토 StudentConfig 클래스 스프링 IoC를 스캔하는 방법을 알려 : 
패키지 POJO를, 

가져 오기 org.springframework.context.annotation.ComponentScan을, 

@ComponentScan을 (basePackages = { "POJO", "- 서비스" })
 공용  클래스 {StudentConfig은 
} 

// 또는 스캔 할 수있는 XML 파일에 선언 할 수있다 
<컨텍스트를 : 스캔 기지 - 구성 요소 패키지 = "POJO를"/> 
<컨텍스트 : 스캔 기지 - 구성 요소 패키지 = "- 서비스"/> // 첫번째 두 단계 : 테스트 클래스를 작성 : 패키지 페널티을위한 테스트, 가져 오기 org.springframework.context.ApplicationContext을,
 가져 오기




org.springframework.context.annotation.AnnotationConfigApplicationContext;
수입 pojo.StudentConfig;
수입 service.StudentService;
수입 service.StudentServiceImp; 

공용  클래스 TestSpring { 

    공공  정적  무효 메인 (문자열 []에 args) {
         // 通过注解的方式初始化스프링 IOC는容器 
        ApplicationContext의 컨텍스트 = 새로운 AnnotationConfigApplicationContext (StudentConfig. 클래스 ); 
        StudentService studentService = context.getBean ( "studentService", StudentServiceImp. 클래스 ); 
        studentService.printStudentInfo ();
    } 
}

요약 :

@Autowired 어노테이션은 콩의 위치를 결국 스프링의 IoC를 나타내는 다음 유형에 따라 자료를 찾아, 다음 주입.

프로세스 : 콩의 정의 - "초기화 콩 (스캔) -"콩은 속성에 따라 검색 Spring IoC 컨테이너의 요구 사항을 충족하는 데 필요한 - '주입의 요구 사항을 충족

질문 : 컨테이너가 실패를 찾고 될 수 IOC의 다음 예외가 발생합니다 (기본적으로 Spring IoC 컨테이너는 우리가이 필드에 주입하기 위해 해당 Bean을 찾을해야한다고 생각하지만, 때로는 반드시 로깅과 같이 필요가 없습니다)

해상도 : 필요한 구성 예를 @Autowired (필수 = 거짓)를 사용하여 변경이 IOC 컨테이너를 부여하지이 속성은 콩을 찾을 제어 될 수있다.

PS : @Autowired 어노테이션을 구성 할 수는없는 속성 만에,이 방법은 모든 사용자가 사용할 수있는 콩 봄 IOC의 지역 자원을 찾을 필요가 구성, 콩 일반 setter 메소드는 한마디로, 주입을 완료하는 데 사용할 수 있습니다

추천

출처www.cnblogs.com/riches/p/11521428.html