[Spring] Scope

­Valentine·2022년 2월 22일
0

CS

목록 보기
21/23

CS공부 18일차. 오늘은 스프링에서 빈이 적용되는 범위인 scope의 종류와 적용 방법에 대해 토비의 스프링 3.1을 읽고 알아보았습니다.

Singleton Scope

  • 스프링 빈의 스코프는 싱글톤이 디폴트이다.

  • ApplicationContext 마다 Bean Object가 한 개씩만 만들어진다는 의미이다.

  • 매번 애플리케이션 로직을 담은 오브젝트를 새로 만들지 않기 때문에 효율적이다.

  • 하나의 빈 오브젝트에 동시에 여러 스레드가 접근한다.

  • 상태값을 인스턴스 변수에 저장하지 않고 읽기전용 값만 저장한다.

  • 여러개의 빈에서 DI를 해도 매번 동일한 오브젝트가 주입된다.

Prototype Scope

@Scope(“prototype")
  • 매번 새로운 오브젝트를 생성한다.

  • 컨테이너가 빈을 전적으로 관리하는 IoC 기본원칙을 따르지 않고 생성된 이후에는 주입받은 빈이 관리한다. 따라서 한번 만들어진 빈을 다시 컨테이너를 통해 가져올 수 없다.

  • 사용자의 요청에 따라 매번 독립적인 오브젝트를 만들어야 하며 DI가 필요할 때 사용된다.

  • 오브젝트 중심적이고 확장이 유연하다.

  • DI는 데이터를 덮어쓰기 때문에 적절하지 못하고 DL 방식으로 사용해야 한다.

DL 방식

  1. ApplicationContext를 @Autowired를 통해 DI 받은 후에 getBean으로 직접 호출

  2. ObjectFactory를 사용하여 ApplicationContext를 DI받게 하고 이 Factory를 DI받아서 getObject로 호출

  3. 메소드 주입

abstract public ServiceRequest getServiceRequest();

public void serviceForm(HttpServletRequest request){
	ServiceRequset sr = this.getServiceRequest();
	...
}
  1. Provider
  @Autowired 
Provider <ServiceRequest> serviceRequestProvider;
public void serviceForm(HttpServletRequest request){
	ServiceRequset sr = this.serviceRequestProvider.get();
	...
}

Request Scope

  • 하나의 웹 요청 안에서 만들어지고 해당 요청이 끝날 때 제거

  • 빈 오브젝트 내에 상태값 저장 가능

  • 각 요청마다 독립적으로 빈이 만들어지므로 동시에 여러 사용자가 많은 요청을 보내도 처리 가능

  • 코드에서 생성한 정보를 프레임워크 레벨의 서비스에 전달할 때 사용

Session Scope

  • 사용자별로 만들어지고 브라우저를 닫거나 세션 타임이 종료될 때까지 유지되는 세션과 같은 존재 범위를 가진다.

  • 세션에 저장되는 정보를 모든 계층에서 이용 가능

Application Scope

  • 서블릿 컨텍스트에 저장되는 빈 오브젝트

  • 싱글톤과 범위가 같지만 드물게 ApplicationContext와 Web Application의 존재 범위가 다를 경우 사용된다.

profile
천체관측이 취미

0개의 댓글