빈 생성 범위
스프링 빈은 기본적으로 싱글톤으로 만들어집니다. 따라서 컨테이너가 제공하는 모든 빈의 인스턴스는 항상 동일합니다. 컨테이너가 항상 새로운 인스턴스를 반환하게 만들고 싶을 경우, 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 |