처음 요청이 발생해서부터 응답결과가 전달될 때까지의 범위를 RequestScope, 

브라우저에 의해 최초의 요청이 발생되고 브라우저가 종료될 때까지의 범위를 SessionScope,

서버가 가동될 때부터 서버가 종료되는 시점까지의 범위를 ApplicationScope라고 부른다!!

 

ApplicationScope동안 사용할 수 있는 메모리영역이 만들어지며 ServletContext라는 클래스 타입의 객체로 관리된다.

ServletContext에 저장된 데이터나 객체는 서버가 종료되기 전까지 웹브라우저에 관계없이 동일한 메모리 공간을 사용하게 된다. 즉, 서버만 종료되지 않는다면 다른 브라우저에서도 같은 메모리공간을 사용할 수 있다는 의미이다.

 

 

 

1. ServletContext

 

 

ServletContext는 HttpServletRequest에서 받아올 수 있다. 위와 같이 ServletContext형 변수를 만들어서 받아온 후에 사용할 수 있다. Request영역이나 Session영역과 크게 다를바는 없다. ServletContext를 사용한다는것만 알아두도록 하자.

 

 

 

ServletContext는 타입을 통한 주입으로 Controller에서 주입을 받을 수 있다.

위와 같이 @Autowired로 ServletContext를 자동주입 받아 오면 매개변수로 HttpServletRequest를 받아오지 않아도 ServletContext를 이용해서 Application영역의 메모리공간을 사용할 수 있다. 

 

 

 

 

 

2. ApplicationScope 빈 주입

 

빈을 정의할 때 ApplicationScope로 정의하면 서버가 가동될 때 자동으로 주입된다. 주입된 빈은 주입만 이루어지는 것이므로 Application영역에는 저장되지 않는다. (RequestScope, SessionScope와 동일하다.)

 

 

자바 빈 설정파일에 다음과 같이 @ApplicationScope를 사용해서 빈을 2개 정의해주었다. 위의 bean1메소드는 타입을 통한 빈 주입에 사용될 것이고 bean2메소드는 이름을 통한 빈 주입에 사용될 것이다.

 

 

타입을 통한 주입

 

이름을 통한 주입

 

각각 타입을 통한 주입과 이름을 통한 주입이다. 위에서 설명하였듯, Application영역에 직접 주입되는 것이 아니기 때문에 View단에서 사용하려면 Model을 사용하여 현재 빈을 Request영역에 넣어서 보내주어야 한다.

 

 

<body>
   <h1> result </h1>
   data1 : ${requestScope.application.data1}<br/>
   data2 : ${requestScope.application.data2}<br/>
</body>

 

 

Application영역이 아닌 Request영역에 잘 들어갔는지 (사실 Model로 넘겨주었으니 당연한것.) 확인하기 위해 requestScope를 앞에 붙여주었다. 결과는 잘 나왔다.

 

만약 빈을 xml에서 만들어주었다면?

 

root-context.xml에 위와 같이 설정해 주면 되겠다.

 

 

 

 

 

다음으로는 컨포넌트 어노테이션을 이용한 빈 주입을 살펴보도록 하자.

 

 

빈 클래스에 @Component와 @ApplicationScope을 붙여준다. 그리고 컴포넌트 스캔을 설정해주면 된다.

 

자바 빈 설정파일의  ComponentScan
servlet-context.xml의 ComponentScan

 

자바 빈 설정파일과 xml의 컴포넌트 스캔 등록방법은 다음과 같다. bean객체가 있는 패키지를 등록해주면 된다.

@Component는 기본적으로 타입을 통한 객체 자동주입이 때문에 위의 @Autowired를 사용한 예제와 똑같이 해주면 된다.

'JAVA > Spring MVC' 카테고리의 다른 글

Properties  (0) 2020.04.28
SpringMVC에서 Cookie 사용하기  (0) 2020.04.28
Spring MVC에서의 빈 관리 (SessionScope)  (0) 2020.04.27
Spring MVC에서의 빈 관리 (RequestScope)  (0) 2020.04.27
Redirect와 Forward  (0) 2020.04.24

+ Recent posts