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


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

 

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

태그와 동일한 역할을 한다.

– Class-level annotation

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

 

2) @Controller

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

 

3) @Service

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

 

4) @Repository

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

* @Repository, @Service, @Controller

 

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

* 컴포넌트는 Bean이다.




4. Bean 의존관계 주입 Annotation

 

1) @Autowired

 

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

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

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

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

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

, 태그와 동일한 역할을 한다.

 

2) @Value

 

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

와 동일한 역할을 한다.

 

3) @Qualifier

 

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

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

 

4) @Resource

 

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

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

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

 

5) Component Scan을 지원하는 태그

 

태그

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

 

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

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

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

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

 

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

[Spring] Redirect Forward Filter Mapping URL패턴

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