ApplicationScope Bean ?
* 빈(Bean)을 정의할 때 ApplicationScope로 정의할시, WAS(Web Application Server) 가동될 때, @ApplicationScope로 정의된 Bean객체가 주입된다.
(주입객체는 웹애플리케이션서버(WAS)가 종료되기 전까지 같은 주소값을 가지며 해당 객체에 데이터 저장유지 및 공유된다)
* 빈(Bean)이 주입되는 방법만 정의되는 것이며, Application영역에 빈(Bean)이 저장되지 않는다.
* 빈(Bean)을 등록하는 방법으로 Java의 @ApplicationScope 어노테이션 활용 또는,
Xml의 <bean/> 정의시 scope="application" 속성을 지정하는 방법이 있다.
# @RequestScope: 새로운 요청이 발생될 때마다 Bean주입되며 새로운 인스턴스가 할당되므로 객체주소값이 바뀐다.
# @SessionScope: 세션영역 생성시점(Browser에서 서버로 최초요청)에 Bean주입되며 해당 브라우저가 종료되기 전 까지 Bean은 재 주입 되지않는다. 객체의주소값이 유지된다.
ApplicationScope Bean Exercise..
-- Java 설정.
1. 빈 등록을 위한, 클래스선언 (ApplicationScope)
* ApplicationBean1, ApplicationBean2, ApplicationBean3, ApplicationBean4 클래스 선언 (어플리케이션스코프)
[ApplicationBean1, ApplicationBean2] : 빈 등록 클래스 --> @Configuration, @Bean, @ApplicationScope 사용하여 빈 수동등록
[ApplicationBean3, ApplicationBean4] : @Component, @ComponentScan, @ApplicationScope 사용하여 빈 자동등록
@Component사용시, @ComponentSacn에 스캔할 컴포넌트의 패키지(Package)경로를 등록해야 한다.
2. RootAppContext, ServletAppContext 수정 - 빈 등록
* ApplicationBean1, ApplicationBean2, ApplicationBean3, ApplicationBean4 빈 등록
[ApplicationBean1, ApplicationBean2] : @Configuration, @Bean을 사용하여 수동으로 빈 수동등록.
[ApplicationBean3, ApplicationBean4] : @ComponentSacn("컴포넌트 스캔경로") 를 선언함으로써 컴포넌트 스캔을 통한 @Component 선언된 클래스 빈(Bean) 자동등록.
* [ApplicationBean2, ApplicationBean4] 클래스타입이 아닌 설정 빈 이름으로 주입.
--> ApplicationBean2: @Bean("빈 이름: applicationBean2")
ApplicationBean4: @Component(value="빈 이름: applicationBean4")
4. TestApplicationScopeBeanController 컨트롤러 생성
* @Autowired, @Resource 어노테이션을 사용하여 @ApplicationScope로 생성되는 빈(Bean)을 주입 및 사용한다.
-- @Autowired : 클래스 타입을 통하여, 객체주입 (ApplicationBean1, ApplicationBean3)
-- @Resource : 빈 생성시 설정했던 이름으로 객체주입 (ApplicationBean2, ApplicationBean4)
선언형식은 @Resource(name="빈 이름")와 같다.
* @Application는 빈(Bean)이 주입되는 방법만 정의되는 것이며, Application영역에 빈(Bean)이 저장되지는 않는다. 따라서, Request영역(Model, ModelAndView)에 저장하여 빈(Bean) 활용이 가능하다.
3. ApplicationScopeBean 확인 (Browser 테스트)
* 최초 서블릿요청 ("/applicationBeanTest1") 발생시 ApplicationScope로 정의된 빈(Bean) @Autowired, @Resource를 통한 객체주입 및 Setter를 통한 데이터저장 이후, 서블릿 재 요청 ("/applicationBeanResult/{browser}") 에서 위, ApplicationScope저장된 객체에 관하여 Getter를 통하여 저장된 데이터 확인.
* WAS(Web Application Server) 가동될 때, @ApplicationScope로 정의된 Bean객체가 주입 후 유지.
* 여러 웹 브라우저(Chrome, Internet Explorer, Edge Explorer) 요청에 관계없이 같은 메모리공간(객체주소) 사용.
(@ApplicationScope객체는 웹애플리케이션서버(WAS)가 종료되기 전까지 같은 주소값을 가지며 해당 객체에 데이터 저장유지 및 공유된다 따라서, 여러브라우저에서도 동일하게 사용가능)
-- Xml 설정.
java 설정과 거의 동일하며 "빈 등록" 및 "컴포넌트스캔" 설정부분만 다르다.
1. root-context.xml 수정 - "빈 수동등록"
* 빈 수동등록 <bean class="빈 경로" scope="application" id="빈 이름"/>
--> id 속성 지정시 @Resource(name="빈 이름") 으로 주입받으며, 객체주입시 Application영역에 자동으로 저장된다.
2. servlet-context.xml 수정 - "컴포넌트스캔: 빈 자동등록"
* 컴포넌트 스캔 경로 등록 - 스캔경로 관하여, @Component설정 빈(Bean) 자동등록
<context:component-scan base-package="컴포넌트 스캔경로" />
* 서버가 가동될 때 주입이 이루어지므로, 빈(Bean)을 주입받는 곳에서 @Lazy설정을 하지 않아도 된다.
@Controller
public class "ApplicationBean주입Controller" {
@Autowired
@Lazy
ApplicationBean1 applicationBean1;
}
'SpringMVC' 카테고리의 다른 글
[SpringMVC] Properties 정의 및 활용(2) (0) | 2021.10.27 |
---|---|
[SpringMVC] Properties 정의 및 활용(1) (0) | 2021.10.20 |
[SpringMVC] ApplicationScope(1) (0) | 2021.10.11 |
[SpringMVC] SessionScope Bean(2) (0) | 2021.10.04 |
[SpringMVC] SessionScope(1) (0) | 2021.09.20 |