Spring Bean 이란
Spring 에서 POJO(plain, old java object)를 "Beans"라고 부른다.
Beans는 애플리케이션의 핵심을 이루는 객체이며, Spring IoC(Inversion of Control) 컨테이너에 의해 인스턴스화, 관리, 생성된다.
Beans는 우리가 컨테이너에 공급하는 설정 메타 데이터(XML 파일)에 의해 생성된다.
- 컨테이너는 이 메타 데이터를 통해 Bean의 생성, Bean Life Cycle, Bean Dependency(종속성) 등을 알 수 있다.
애플리케이션의 객체가 지정되면, 해당 객체는 getBean() 메서드를 통해 가져올 수 있다.
Spring Bean 정의
일반적으로 XML 파일에 정의한다.
🔻주요속성
- class(필수) : 정규화된 자바 클래스 이름
- id : bean의 고유 식별자
- scope : 객체의 범위(sigleton, prototype)
- constructor-arg : 생성 시 생성자에 전달한 인수
- property : 생성 시 bean setter에 전달할 인수
- init method 와 destroy method
XML based configuration file(xml 설정 파일)
Spring Bean Scope
스프링은 기본적으로 모든 bean을 singleton으로 생성하여 관리한다.
구체적으로는 애플리케이션 구동 시 JVM 안에서 스프링이 bean마다 하나의 객체를 생성하는 것을 의미 한다.
그래서 우리는 스프링을 통해서 bean을 제공받으면 언제나 주입받은 bean을 동일한 객체라는 가정하에서 개발을 한다.
request, session, global session의 Scope는 일반 Spring 애플리케이션이 아닌, Spring MVC Web Application 에서만 사용한다.
❓싱글톤(Singleton)이란?
'singleton' bean은 Spring 컨테이너에서 한 번 생성된다. (컨테이너가 사라질 때 bean 도 제거됨)
생성된 하나의 인스턴스는 single beans cache에 저장되고, 해당 bean에 대한 요청과 참조가 있으면 캐시된 객체를 반환한다. (즉, 하나만 생성되기 때문에 동일한 것을 참조한다)
기본적으로 모든 bean은 scope(범위)가 명시적으로 지정되지 않으면 singleton이다.
xml 에서 설정할때는
<bean id = ",,," class="..." scope="singleton"></bean>
annotation 설정은 대상 클래스에 @Scope("singleton")으로 사용한다.
(하지만, 모든 bean은 scope가 지정되지 않으면 singleton이기 때문에 따로 명시할 필요는 없다.)
❓프로토타입(Prototype)이란?
'prototype' bean 은 모든 요청에서 새로운 객체를 생성하는 것을 의미한다.
즉, prototype bean은 의존성 관계의 bean에 주입 될 때 새로운 객체가 생성되어 주입된다.
정상적인 방식으로 gc에 의해 bean 제거된다.
xml 에서 설정할때는
<bean id = ",,," class="..." scope="prototype"></bean>
annotation 설정은 대상 클래스에 @Scope("prototype")으로 사용한다.
참고자료
'Back-end > spring' 카테고리의 다른 글
[Spring] Spring type(스프링의 종류) (0) | 2022.12.05 |
---|---|
[Spring] DI, IoC 정리 (0) | 2022.11.14 |
[Spring] Lombok 어노테이션 정리 (1) | 2022.11.14 |
[Spring JPA] JPA는 무엇인가? (0) | 2022.09.23 |
Spring Security와 JWT의 개념 (0) | 2022.09.15 |