[Spring] DI(Dependency Injection)

무1민·2023년 4월 23일
0

Spring

목록 보기
2/9
post-thumbnail

빈 생성범위

  • 싱글톤 빈(Singleton Bean)

    • 스프링 빈은 기본적으로 '싱글톤'으로 만들어짐
    • 그러므로, 컨테이너가 제공하는 모든 빈의 인스턴스는 항상 동일함.
    • 컨테이너가 항상 새로운 인스턴스를 반환하게 만들고 싶을 경우 scope를 prototype으로 설정해야함

빈의 생성 범위 지정

스프링 빈 설정

  • 스프링 빈 설정 메타정보

스프링 빈 설정 : XML

  • XML 문서

    • XML문서 형태로 빈의 설정 메타 정보를 기술
    • 단순하며 사용하기 쉬움
    • bean 태그를 통해 세밀한 제어 가능

스프링 빈 설정 : Annotation

  • Annotation

    • 어플리케이션의 규모가 커지고 빈의 개수가 많아질 경우 XML 파일을 관리하는 것이 번거로움

    • 빈으로 사용될 클래스에 특별한 annotation을 부여해 주면 자동으로 빈 등록 가능

    • "오브젝트 빈 스캐너"로 "빈 스캐닝"을 통해 자동 등록

      • 빈 스캐너는 기본적으로 클래스 이름을 빈의 아이디로 사용
      • 정확히는 클래스 이름의 첫 글자만 소문자로 바꾼 것을 사용

  • Annotation으로 빈을 설정할 경우 반드시 component-scan을 설정해야 한다.

  • Stereotype annotation 종류

    • 빈 자동등록에 사용할 수 있는 annotation
    • 빈 자동인식을 위한 annotation이 여러가지인 이유
      • 계층별로 빈의 특성이나 종류를 구분
      • AOP Pointcut 표현식을 사용하면 특정 annotation이 달린 클래스만 설정 가능
      • 특정 계층의 빈에 부가기능을 부여

Dependency Injection

  • 객체 간의 의존관계를 자신이 아닌 외부의 조립기가 수행.
  • 제어의 역행(inversion of Control, IoC)이라는 의미로 사용
  • DI를 통해 시스템에 있는 각 객체를 조정하는 외부 개체가 객체들에게 생성시에 의존관계를 주어짐
  • 느슨한 결합의 주요 강점
    • 객체는 인터페이스에 의한 의존 관계만을 알고 있으며, 이 의존 관계는 구현 클래스에 대한 차이를 모른 채 서로 다른 구현으로 대체가 가능.

스프링의 DI 지원

  • Spring Container가 DI 조립기를 제공
    • 스프링 설정 파일을 통하여 객체 간의 의존관계를 설정
    • Spring Container가 제공하는 API를 이용해 객체를 사용

Spring 설정 : xml

  • XML 문서이용

    • Application에서 사용할 Spring 자원들을 설정하는 파일
    • Spring Container는 설정파일에 설정된 내용을 읽어 Application에서 필요한 기능들을 제공
    • Root tag는 "beans"
    • 파일명은 상관X

  • 기본설정 - 빈 객체 생성 및 주입

    • 주입할 객체를 설정파일에 설정
      • "bean" : 스프링 컨테이너가 관리할 Bean객체를 설정
    • 기본 속성
      • name : 주입 받을 곳에서 호출할 이름 설정.
      • id : 주입 받을 곳에서 호출할 이름 설정(유일 값)
      • class : 주입할 객체의 클래스
      • factory-method : Singleton 패턴으로 작성된 객체의 factory 메소드 호출

  • 기본설정 - 빈 객체 얻기

    • 설정 파일에 설정한 bean을 Container가 제공하는 주입기 역할의 api를 통해 주입 받는다.

스프링 빈 의존 관계설정 - xml

Constructor





Property






Collection 계열 주입




스프링 빈 의존 관계 설정 - annotation

  • Annotation : 멤버변수에 직접 정의하는 경우 setter method를 만들지 않아도 됨

  • 특정 Bean의 기능 수행을 위해 다른 Bean을 참조해야 하는 경우 사용한다.

  • @Resource

    • 멤버변수에 @Resource

    • setter method에 @Resource

  • @Autowired

    • Spring Framework에서 지원하는 Dependency 정의 용도의 Annotation으로, Spring Framework에 종속적이긴 하지만 정밀한 Dependency Injection이 필요한 경우에 유용하다.
    • 생성자, 필드, 일반 method에 @Autowired
      • 동일한 타입의 bean이 여러 개일 경우에는 @Qualifier("name")으로 식별한다.

기타 설정


스프링 빈의 생명 주기(Life Cycle)

profile
야호

0개의 댓글