Annotation DI 및 객체 생성

Codren·2021년 6월 19일
0

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 웹 개발과 관련되어 있는 어노테이션

0개의 댓글