Annotation DI 및 객체 생성

3652 단어 SpringSpring

Section 1. Annotation DI

1. Annotation

코드 사이에 주석처럼 쓰여 특별한 의미를 부여해 특정 기능을 수행하도록 하는 기술
프로그램에게 추가적인 정보를 제공해주는 메타데이터




2. XML DI   vs   Annotaion DI

  • 코드를 수정하지 않고 외부 설정 파일(XML)을 수정하여 컴파일 및 재배포하지 않고 서비스를 업데이트
  • 프로그램의 규모가 커지면서 외부 설정 파일 또한 복잡해짐 -> 가독성 ↓
  • 설정 파일을 확장하지 않고 코드내에 어노테이션으로 코드화 하여 자동으로 DI 수행
  • 직관적으로 어떤 추가적인 기능을 수행하는지 알 수 있음
  • 일부는 컴파일 및 재배포 하지만 다른 일부는 런타임 시 변경 가능한 것 같음




3. @AutoWired

  • 자동으로 객체를 연결 (의존성 주입)하도록 멤버변수, 생성자, setter 메서드 등에 지정하는 어노테이션
  • context Namespace 불러오기

  • 멤버변수, 생성자, setter 메서드 등에 @Autowired 지정하면 XML 내에서 property 태그 생략 가능
    (오버로딩 된 생성자가 존재할 경우 기본 생성자 정의해야함)

  • Spring Bean Configuration File (XML) 에 어노테이션을 이용했다고 Spring 에게 알림
  • 설정 파일에 존재하는 bean 객체를 생성할 때 어노테이션이 설정된 setter를 찾음
<context:annotation-config />




4. @AutoWired 동작 원리

  • @Autowired 지정된 setExam 메서드의 매개변수 타입으로 참조가 가능한 클래스 객체가 XML 파일에 하나만 존재할 경우 자동으로 해당 객체를 DI
  • 두 개 이상일 때는 매개변수의 이름과 bean의 id 값이 일치하는 것을 찾음




5. @AutoWired required 옵션

  • 해당하는 bean 객체를 찾을 수 없는 경우에는 에러가 발생함
  • 에러를 발생시키지 않고 null 값으로 그대로 프로그램을 실행 시키려면 false 설정




6. @Qualifier

  • id 값이 일치하는 것을 찾도록 설정하는 어노테이션
  • 오버로딩된 생성자에는 매개변수 앞에 붙여줘야함 (기본생성자와 setter와 다르게 여러개 가능)



Section 2. Annotation 객체 생성

1. @Component

  • XML 설정 파일에서 bean으로 객체를 생성하지 않고 코드 내에 @Component 지정하여 생성
  • 생성하려는 객체의 클래스 정의 위에 @Component 지정

  • XML context Namespace 지정
<context:component-scan base-package="spring.di.ui, spring.di.entity"/>		//  지정된 경로에 Component 붙은 클래스를 생성해라 
<!-- <context:annotation-config /> -->			//  생략 가능




2. @Value

  • @Component 어노테이션으로 객체를 생성할 때 멤버변수를 초기화




3. Component 의 종류

  • Component 요소를 좀 더 특화된 이름으로 어노테이션 지정할 수 있음
  • MVC 웹 개발과 관련되어 있는 어노테이션

좋은 웹페이지 즐겨찾기