Spring

[Spring Architecture DI] 의존성 주입(DI)

sujin7837 2022. 4. 20. 01:26
반응형

빈 생성 범위

스프링 빈은 기본적으로 싱글톤으로 만들어집니다. 따라서 컨테이너가 제공하는 모든 빈의 인스턴스는 항상 동일합니다. 컨테이너가 항상 새로운 인스턴스를 반환하게 만들고 싶을 경우, scope를 prototype으로 설정해야 합니다.

@Scope(value="prototype")
범위 설명
singleton 스프링 컨테이너당 하나의 인스턴스 빈만 생성 (default)
prototype 컨테이너에 빈을 요청할 때마다 새로운 인스턴스 생성
request HTTP Request별로 새로운 인스턴스 생성
session HTTP Session별로 새로운 인스턴스 생성

 

스프링 빈 설정

스프링 빈 설정 메타 정보의 표현 방식

 

1. XML 문서

 

-XML 문서 형태로 빈의 설정 메타 정보를 기술합니다.

-단순하며 사용하기 쉽습니다.

-<bean> 태그를 통해 세밀한 제어가 가능합니다.

 

2. 애노테이션(Annotation)

 

-어플리케이션의 규모가 커지고 빈의 개수가 많아질 경우 XML 파일을 관리하는 것이 번거롭습니다.

-빈으로 사용될 클래스에 특별한 annotation을 부여해주면 자동으로 빈 등록이 가능합니다.

-"Object Bean Scanner"로 Bean Scanning을 통해 자동으로 등록합니다.

  • Bean Scanner는 기본적으로 클래스 이름의 첫글자를 소문자로 바꾼 것을 사용

-Stereotype annotation 종류

Stereotype 적용 대상
@Repository -Data Access Layer의 DAO 또는 Repository 클래스에 사용
-DataAccessException 자동변환과 같은 AOP의 적용 대상을 선정하기 위해 사용
@Service Service Layer의 클래스에 사용
@Controller -Presentation Layer의 MVC Controller에 사용
-스프링 웹 서블릿에 의해 웹 요청을 처리하는 컨트롤러 빈으로 선정
@Component 위의 Layer 구분을 적용하기 어려운 일반적인 경우에 설정

 

3. 자바 코드

 

DI(Dependency Injection)

-객체 간의 의존관계를 자신이 아닌 외부의 조립기가 수행합니다.

-제어의 역행(IoC : Injection of Control)으로 사용합니다.

-의존성 주입을 통해 시스템에 있는 각 객체를 조정하는 외부 개체가 객체들에게 생성시에 의존 관계가 주어집니다.

-loose coupling의 주요 강점으로, 객체는 인터페이스에 의한 의존 관게만을 알고 있으며, 이 의존 관계는 구현 클래스에 대한 차이를 모르는 채 서로 다른 구현으로 대체가 가능합니다.

 

스프링 빈 의존 관계 설정

XML

1. 생성자 이용

2. Property 이용

-XML namespace를 이용하여 주입 : p

 

Annotation

멤버변수에 직접 정의하는 경우에는 setter method를 만들지 않아도 됩니다.

Annotation 설명
@Resource -Spring 2.5부터 지원
-멤버변수, setter method에 사용 가능
-타입에 맞춰 연결
@Autowired -Spring 2.5부터 지원
-Spring에서만 사용 가능
-Required 속성을 통해 DI 여부 조정
-멤버변수, setter, constructor, 일반 method에 사용 가능
-타입에 맞춰 연결
@Inject -Spring 3.0부터 지원
-Framework에 종속적이지 않음
-Java.inject-x.x.x.jar 필요
-멤버변수, setter, constructor, 일반 method에 사용 가능
-이름으로 연결

@Resource(name="mdao")를 사용하는 방식과 @Autowired @Qualifer(value="mdao") 를 사용하는 방식이 동일한 의미입니다.

 

기타 설정

-빈 객체의 생성 단위

  • BeanFactory를 통해 Bean을 요청 시 객체 생성 범위를 설정합니다.
  • <bean>의 scope 속성을 이용하여 설정합니다.
scope 설명
singleton 스프링 컨테이너당 하나의 인스턴스 빈만 생성(default)
prototype 컨테이너에 빈을 요청할 때마다 새로운 인스턴스 생성
request HTTP Request별로 새로운 인스턴스 생성
session HTTP Request별로 새로운 인스턴스 생성

 

스프링 빈의 Life Cycle

 

반응형

'Spring' 카테고리의 다른 글

[FileUpload] 파일 다운로드  (0) 2022.04.22
[FileUpload] 파일 업로드  (0) 2022.04.22
[Spring Architecture DI] IoC  (0) 2022.04.20
[Spring Architecture DI] Container  (0) 2022.04.19
[Spring Architecture DI] Spring Framework 구조  (0) 2022.04.19