39일차 TIL 스프링 IoC 컨테이너와 Bean

김성훈·2021년 11월 10일
1

SPRING

목록 보기
6/12
post-thumbnail

🖥️Spring 의존관계 주입 과정🖥️


💻스프링 IoC 컨테이너💻

  • BeanFactory
  • 애플리케이션 컴포넌트의 중앙 저장소
  • 빈 설정 소스로 부터 빈 정의를 읽어들이고, 반을 구성하고 제공한다.
  • 스프링에서는 객체 생성, 연결 및 소멸의 책임이 IoC 컨테이너로 인계된다.
  • 자바 클래스는 의존성을 정의하고, IoC 컨테이너는 객체를 만들고 의존성을 연결한다.
  • IoC(제어의 역전)을 구현한 방법으로 DI(의존성 주입)를 사용한다.

💽Bean💽

  • 빈(Bean)은 스프링 컨테이너를 통해 생성되고, 스프링 IoC 컨테이너로 생명주기가 관리되는 객체를 의미한다.
  • 을 생성해야하는 클래스에 @Component 어노테이션을 사용하면 런타임 시점에서 IoC 컨테이너가 객체들을 스캔하며 빈으로 등록해준다.
  • Controller, Service 등을 하나의 빈(Bean)이라고 한다.

장점

1. 의존성 생성에 대한 책임이 없기 때문에 느슨한 결합도를 유지할 수 있다.

2. 스프링 Ioc 컨테이너에서는 모든 빈들을 싱글톤 객체로 생성한다.
(scope 옵션으로 해제 가능), (참고로, 객체를 매번 생성하는 타입은 프로토타입)
자원을 많이 사용하는 db 접근 객체들은 싱글톤으로 사용하는 게 좋은데,
저 선언 하나만으로 싱글톤으로 객체를 관리한다고 함.

<싱글톤>
객체가 하나만 만들어짐. 재사용하여 메모리를 절약하며, 런타임시 성능 최적화에 유리하다. 특히 데이터베이스와 관련된 객체들은 필드가 많기 때문에 만드는 비용이 많이 들기 때문에 싱글톤이 효율적임.

<느슨한 결합>
객체를 주입 받는다는 것은 외부에서 생성된 객체를 인터페이스를 통해서 넘겨받는 것이다. 이렇게 하면 결합도를 낮출 수 있고, 런타임시에 의존관계가 결정되기 때문에 유연한 구조를 가진다.

<강한 결합>
체 내부에서 다른 객체를 생성하는 것은 강한 결합도를 가지는 구조. A 클래스 내부에서 B 라는 객체를 직접 생성하고 있다면, B 객체를 C 객체로 바꾸고 싶은 경우에 A 클래스도 수정해야 하는 방식이기 때문에 강한 결합이다.

🖱️ApplicationContext🖱️

실질적으로 우리가 많이 사용하게 될 빈 팩토리다. BeanFactory를 상속받으므로 BeanFactory의 IoC 기능을 가지고 있으면서도 추가적으로 다양한 기능을 가지고 있다.

  • BeanFactory
  • 메시지 소스 처리 기능
  • 이벤트 발행 가능
  • 리소스 로딩 가능

🖲️스프링 빈 등록하는 2가지 방법🖲️

1. 컴포넌트 스캔과 자동 의존관계 설정

-> 컴포넌트 스캔의 원리는 기본적으로 @Component 어노테이션이 있으면 자동으로 스프링 빈으로 등록된다.
참고로, @Component 어노테이션은 @Controller , @Service, @Repository를 포함한다.

2. 자바 코드로 직접 스프링 빈 등록하기

-> 스프링에서는 xml 설정파일이 아닌 자바코드를 통해 인스턴스를 생성하면서 의존성을 주입하는 방식으로 만들어진 객체를 빈으로 사용할 수 있는 방법을 제공한다.
방법은 클래스 레벨에서는 @Configuration을 붙이고, 메서드 레벨에서는 @Bean애노테이션을 붙이면 됨.

🖨️꺼내 쓰는 법🖨️

1. @Autowired 또는 @Injec 선언하면 IoC 컨테이너에 있는 빈을 주입받아 사용할 수 있음

2. ApplicationContext 에서 getBean()으로 직접 꺼내는 방법이 있음

@Autowired : 멤버 변수, setter 메소드, 생성자, 일반 메소드에 적용 가능
@Inject : 멤버변수, setter 메소드, 생성자, 일반 메소드에 적용 가능


특징

⭐오로지 "빈"들만 의존성 주입을 해줌⭐

🌟스프링 모듈과 IoC , DI🌟
요것도 같이 보기

<출처>

[Spring] IoC 컨테이너 와 Spring Bean
스프링 빈을 등록하는 2가지 방법 / DI 주입 방법
[백기선 스프링 프레임워크 핵심기술] IOC Container and Bean
[Spring] Bean LifeCycle 이란 무엇일까?

profile
"한 명이 걷는 천 걸음 보다 천 명이 함께 걷는 한 걸음이 성공의 시작이고 완성이다"

0개의 댓글