[Spring] Spring DI 용어

JOY·2023년 4월 25일
0

[Spring]

목록 보기
6/18
post-thumbnail

Spring DI

객체간의 의존성을 외부에서 설정하여 객체간 결합도를 줄이고 유연성과 확장성을 높이는 디자인 패턴

Spring 👉 객체를 빈으로 등록
컨테이너 👈 빈을 가져와서 사용
스프링 컨테이너 : 빈의 생성, 관리. 라이프사이클 담당
🔊 스프링은 빈을 중심으로 개발, 스프링 컨테이너가 빈 관리 👉 객체 지향적 개발 가능

Spring DI 용어

  • Bean : 객체
  • BeanFactory : 빈 생성, 관리하는 인터페이스
  • Applicaion Context : BeanFactory를 상속받아 만들어진 컨테이너
  • Configuration metadata : 빈을 설정할 때 사용하는 메타데이터(XML, JavaConfig, @ 등)
  • Bean Factory : 객체의 생성과 객체 사이의 런타임 관계를 DI관점에서 볼 때의 컨테이너
    빈 팩토리에 여러가지 컨테이너 기능을 확장하여 ApplicationContext 라고 함.

Bean 등록 Annotation

등록 방법 : XML, Java Config, @

생성 (Bean 태그 대신)

  • @Component : bean 태그와 동일한 역할
  • @Repository : persistence 레이어, 영속성을 가지는 속성(파일, DB)을 가진 클래스
  • @Service : 서비스 레이어, 비즈니스 로직을 가진 클래스
  • @Controller : 프레젠테이션 레이어, 웹어플리케이션에서 웹 요청/응답 처리 클래스
  • @Scope : bean 생성과 사용범위(Scope) 설정
    • 버전 : singleton, prototype, request, session, global session
    • prototype : 요청할 때 마다 새로운 인스턴스 생성
    • singleton : 하나의 인스턴스만 생성, 모든 요청에서 공유

@Repository, @Service, @Controller@Component 의 구체화된 형태

주입

의존하는 객체를 자동으로 주입

  • @Autowired
    * 프로퍼티, setter 메서드, 생성자, 일반 메서드에 적용
    • 의존하는 객체를 주입할 때 Type을 이용
    • property, constructor-arg 태그와 동일한 역할(DI)
      ❗ 동일한 타입의 빈이 여러개 일 때 구분할 수 가 없다면? @Qualifier 사용
  • @Qualifier
    : @Autowired 사용 시 동일한 타입 빈이 여러개이고 id와 property명이 일치하는 것이 없을 때 해당 어노테이션을 사용하여 빈의 이름을 지정
    • byType 주입
      : 타입을 기준으로 의존성 주입
      : 같은 타입의 빈이 여러개인 경우 byName 사용👇
    • byName 주입
      : 이름을 기준으로 의존성 주입
      : 빈의 이름과 필드나 메서드 이름 일치해야함
  • @Resource
  • @Value

Component 지원 태그

Spring에서는 어노테이션을 사용하여 객체를 생성하고, 의존성을 주입하는 방식을 권장.
이러한 어노테이션을 사용하면, XML 파일에 별도의 설정을 작성할 필요가 없어지며,
어노테이션만으로도 객체 생성 및 의존성 주입이 가능해진다.

<context:component-scan>

  • 클래스 경로를 스캔하여 Spring이 인식할 수 있는 Bean으로 등록하는 기능 수행

장점

  1. 별도의 bean 설정 파일에서 bean을 등록하지 않아도 자동 등록됨
    : bean으로 사용할 클래스에 @Component 어노테이션 추가해야 가능
  • @Component 를 통해 자동으로 Bean 등록, @Autowired 로 의존관계를 주입받는 어노테이션

<context:component-config>

  • 어노테이션 기반의 설정을 활성화 - 객체 생성과 의존성 주입 자동 관리
    : 해당 태그 사용 시 Spring이 어노테이션을 인식하고 알맞은 설정을 자동으로 처리

장점

  1. XML 파일에 별도 설정하지 않아도 어노테이션 작성으로 객체 생성 및 의존성 주입 가능
  2. 코드 가독성 및 작업 효율성 증가
profile
Just Do IT ------- 🏃‍♀️

0개의 댓글