프로그래밍/Spring / / 2022. 11. 9. 11:11

[Spring] Bean Beans IoC컨테이너 의존관계주입

반응형

Bean 등록
Bean 등록

 

1. 용어

 

1) DI (Dependency Injection), IoC(Inversion of Control)

- 스프링이 바닥판처럼 깔려있고, 우리는 그 위에 멋진 조립(애플리케이션)을 만들면 됨.

 

2) Bean

 

- JavaBean

- 데이터를 저장하기 한 구조체로 자바 빈 규약이라는 것을 따르는 구조체
- private 프로퍼티와 getter/setter로만 데이터를 접근한다.
- 인수(argument)가 없는 기본 생성자가 있다.

 

- 스프링에서의 Bean

 

- 스프링 IoC
- 자바에서처럼 new Object()로 생성하지 않는다.
- 각각의 Bean들끼리는 서로 의존(사용)할 수 있다.

 

3) 스프링 컨테이너 개요

 

- ApplicationContext 인터페이스를 통해 제공되는 스프링 컨테이너는 Bean 객체의 생성 및 Bean들의 조립(상호의존성 관리)을 담당한다.

 

- Bean의 등록

- 과거에는 xml로 설정을 따로 관리하여 등록
- 현재는 annotation 기반으로 Bean을 등록
- @Bean, @Controller, @Service

 

- Bean 등록 시 정보

* Class 경로
* Bean의 이름
- 기본적으로 원Class 이름에서 첫 문자만 소문자로 변경
- 원하는 경우 변경 가능하다.

* Scope (Bean을 생성하는 규칙)
- singleton : 컨테이너에 단일로 생성
- prototype : 작업 시마다 Bean을 새로 생성하고 싶을 경우
- request : http요청마다 새롭게 Bean을 생성하고 싶은 경우

 

4) POJO (Plain Old Java Object)

- 객체지향 원리에 충실하면서, 특정 환경이나 규약에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 객체를 말한다.



2. 스프링 IoC 컨테이너 (Spring IoC Container) & 빈(Bean)

 

1) 컨테이너는 제어의 역전(IoC) 원리가 적용된 스프링 핵심 컴포넌트이다.

2) 컨테이너에 의해 생성 및 조립된 후 관리(초기화, 소멸 등)되는 객체를 빈(Beans)라고 부른다.

3) 빈 생성 시 의존관계 주입(DI)이 일어난다.

4) 빈 구성정보를 바탕으로 비즈니스 오브젝트를 이용해 애플리케이션을 구성하고 생애를 관리한다.



3. Bean 등록 Annotation

 

1) @Component

 

- 컴포넌트를 나타내는 일반적인 스테레오 타입

- <bean>태그와 동일한 역할을 한다.

- Class-level annotation

- 등록하려는 빈의 클래스 소스가 편집 가능한 경우 사용한다.

 

2) @Controller

- 프리젠테이션 레이어, 웹 애플리케이션에서 웹 요청과 응답을 처리하는 클래스

 

3) @Service

- 서비스 레이어, 비즈니스 로직을 가진 클래스

 

4) @Repository

- 퍼시스턴스(persistence) 레이어, 영속성을 가지는 속성(파일, 데이터베이스)을 가진 클래스

* @Repository, @Service, @Controller

 

- 더 특정한 유스케이스 이면서 @Component의 구체화된 형태이다.

* 컴포넌트는 Bean이다.



4. Bean 의존관계 주입 Annotation

 

1) @Autowired

 

- 의존하는 객체를 자동으로 주입해주는 어노테이션이다.

- 정밀한 의존관계 주입 (Dependency Injection)이 필요한 경우에 유용하다.

- 프로퍼티, setter 메서드, 생성자, 일반 메서드에 적용 가능하다.

- 의존하는 객체를 주입할 때 주로 Type을 이용하게 된다.

- 타입으로 먼저 검색, 여러개면 이름으로 검색하게 된다.

- <property>, <constructor-arg>태그와 동일한 역할을 한다.

 

2) @Value

 

- 단순한 값을 주입할 때 사용되는 어노테이션이다.

- <property value="값" />와 동일한 역할을 한다.

 

3) @Qualifier

 

- @Autowired 어노테이션과 같이 사용되어 진다.

- @Autowired는 타입으로 찾아서 주입하므로, 동일한 타입의 Bean객체가 여러 개 존재할 때 특정 Bean을 찾기 위해서는 @Qualifier를 같이 사용해야한다.

 

4) @Resource

 

- 애플리케이션에서 필요로 하는 자원을 자동 연결할 때 사용된다.

- 프로퍼티, setter 메서드에 적용 가능하다.

- 의존하는 객체를 주입할 때 주로 Name을 이용하게 된다.

 

5) Component Scan을 지원하는 태그

 

- <context:component-scan> 태그

- @Component를 통해 자동으로 Bean을 등록하고, @Autowired로 의존관계를 주입받는 어노테이션을 클래스에서 선언하여 사용했을 경우에 해당 클래스가 위치한 특정 패키지를 scan하기 위한 설정을 XML에 해주어야 한다.

 

- <context:exclude-filter>태그와 <context:include-filter>태그를 같이 사용하면 자동 스캔 대상에 포함시키지 않을 클래스와 포함시킬 클래스를 구체적으로 명시할 수가 있다.

- base-package에서부터 모든 @Component를 검색

- 인스턴스화 : 필요한 의존성을 모두 주입

- 스프링 컨테이너에 등록 : 필요한 곳에 주입

 

[Spring]스프링 프레임워크 핵심기술 및 횡단 관심사

[Spring] Redirect Forward Filter Mapping URL패턴

[Spring] 세션 설정, 확인, 삭제 및 쿠키와의 비교

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유