Bean Scope란?
Bean Scope는 빈 객체를 정의할 때 지정 하는 범위를 말한다. 개인적으로 정의하자면 빈 객체가 어디 부분에서 쓰이고 얼마나 쓰일지에 대한 내용을 말하는것으로 생각한다.
scope 값을 설정 하지 않으면 singleton(싱글톤)이 디폴트 값이다.
참고 문서 : https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-factory-scopes
Bean Scope 종류
singleton, prototype, request, session, application, websocket으로 구성 되어있다.
1. singleton
기본 값으로 빈 컨테이너(Ioc 컨테이너) 내 하나의 빈 인스턴스를 생성하고 이를 주입해주는 방식
xml 설정 코드
<bean id="accountService" class="com.something.DefaultAccountService"/>
<bean id="accountService" class="com.something.DefaultAccountService" scope="singleton"/>
2. prototype
정의된 Bean이 필요한 순간마다 새로운 객체가 생성되는 방식
xml 설정 코드
<bean id="accountService" class="com.something.DefaultAccountService" scope="prototype"/>
3. request
하나의 Http Request에 하나의 빈 객체를 사용하는 방식이다. Spring Web MVC와 같은 웹 베이스에서만 사용할 수 있다.
xml 설정 코드
<bean id="loginAction" class="com.something.LoginAction" scope="request"/>
어노테이션 설정 코드
@Component나 @Configuration으로 따로 구현할때는 @RequestScope를 추가로 넣어주면 된다.
@RequestScope
@Component
public class LoginAction {
// ...
}
추가로 DispatcherServlet 외부에서 사용하고 싶은 빈 객체를 선언한 Context의 경우 web.xml에 선언해주어야한다.
웹 컨테이너가 Servlet 3.0 이상인 경우
<web-app>
...
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
...
</web-app>
웹 컨테이너가 Servlet 3.0 미만인 경우
<web-app>
...
<filter>
<filter-name>requestContextFilter</filter-name>
<filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>requestContextFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
...
</web-app>
4. session
하나의 Http session에 하나의 빈 객체를 사용하는 방식이다. Spring Web MVC와 같은 웹 베이스에서만 사용할 수 있다.
xml 설정 코드
<bean id="userPreferences" class="com.something.UserPreferences" scope="session"/>
어노테이션 설정 코드
@Component나 @Configuration으로 따로 구현할때는 @SessionScope를 추가로 넣어주면 된다.
@SessionScope
@Component
public class UserPreferences {
// ...
}
5. application
하나의 ServletContext에 하나의 빈 객체를 사용하는 방식이다. Spring Web MVC와 같은 웹 베이스에서만 사용할 수 있다.
xml 설정 코드
<bean id="appPreferences" class="com.something.AppPreferences" scope="application"/>
어노테이션 설정 코드
@Component나 @Configuration으로 따로 구현할때는 @ApplicationScope를 추가로 넣어주면 된다.
@ApplicationScope
@Component
public class AppPreferences {
// ...
}
6. websocket
하나의 websocket 생명주기에 하나의 빈 객체를 사용하는 방식. Spring Web MVC와 같은 웹 베이스에서만 사용할 수 있다.
xml 설정 코드
<bean id="beanId" class="com.howtodoinjava.BeanClass" scope="websocket" />
어노테이션 설정 코드
@Component
@Scope("websocket")
public class BeanClass {
// ...
}
'Spring' 카테고리의 다른 글
Spring MVC JPA 적용하기 (spirng-data-jpa) (0) | 2021.10.21 |
---|---|
Spring XSS Filter 개발 및 적용 (3) | 2021.10.19 |
Spring AOP (Aspect Oriented Programming) (0) | 2021.10.12 |
Spring DI(의존성 주입)와 IoC(제어의 역전) (0) | 2021.10.11 |
eclipse 스프링 레거시 프로젝트 생성 및 나의 기본 세팅 (0) | 2021.09.25 |