728x90
1. Application Context와 Servlet Context 설정과 Transaction
출처: https://hoonmaro.tistory.com/31 [훈마로의 보물창고]
Application Context
- 전체 계층구조에서 최상단에 위치한 컨텍스트
- 서로 다른 서블릿 컨텍스트에서 공유해야하는 Bean들을 등록해놓고 사용할 수 있다.
- 웹 애플리케이션 전체에 적용 가능한 프로퍼티, DB 연결, 로깅 기능 등에 이용한다.
- Servlet Context에 등록된 Bean은 이용할 수 없다.
- Servlet Context에 동일한 Bean이 있을 경우 Servlet Context Bean이 우선된다.
- 하나의 컨텍스트에 정의된 AOP 설정은 다른 컨텍스트의 Bean에는 영향을 미치지 않는다.
Servlet Context
- 서블릿에서만 이용되는 컨텍스트
- 다른 서블릿과 공유하기 위한 Bean들은 Application Context에 등록해놓고 사용해야 한다.
- DispatcherServlet은 자신만의 컨텍스트를 생성, 초기화하고 동시에 Application Context를 찾아서 자신의 부모 컨텍스트로 사용한다.
IoC 컨테이너 구성방법
- Application Context만 이용
- Servlet Context만 이용
- Application Context와 Servlet Context 하나씩 이용
- Application Context와 Servlet Context여러 개 이용
- 여러 Application Context와 Servlet Context 하나 이용
- 각 Application Context 설정을 목적에 맞게 분류 (Property, Validation, sqlMap, datasource, aop 등)
Component Scan 사용시 컨텍스트 설정 방법
- Application Context에 Service, Repository, Servlet Context에 Controller만 등록해야한다.
-
Application Context 설정
- Service와 Repository는 Include 하고 Controller는 Exclude 한다.
- Servlet Context 설정
- Service와 Repository는 Exclude 하고 Controller는 Include 한다.
- 이렇게 설정하는 이유는 스프링이 Transaction을 적용하기 위해서이다.
- 스프링 트랜잭션은 AOP를 이용해서 해당 빈의 proxy를 만들어서 tx가 적용되는 bean을 바꿔치기 한다. 그러면 원래 @Service(또는 @Transactional) 어노테이션이 붙은 빈은 뒤로 숨고 tx가 적용된 proxy bean이 @Service가 붙은 bean으로 대치된다.
- 만약 Application Context와 Servlet Context가 모든 stereotype의 컴포넌트를 풀 스캔 할 경우, tx 설정은 Application Context에만 적용되어 있기 때문에 Application Context의 @Service는 트랜잭션이 적용이 되지만 Servlet Context의 @Service는 트랜잭션이 적용이 안된다.
- Bean 객체는 Servlet Context가 우선되므로 @Controller가 동작하여 같은 context(Servlet Context)안에서 검색을 하고, @Service가 지정된 bean이 있으므로 이 bean을 사용한다. 이 @Service가 지정된 bean은 트랜잭션 적용이 안 되어 있어 트랜잭션 처리가 안된다.
Reference
https://hoonmaro.tistory.com/31
728x90
'Dev > Web' 카테고리의 다른 글
[Spring] Bean 설정 - beans:bean (0) | 2019.10.29 |
---|---|
[Spring] 스프링기초 - @RequestBody, @ResponseBody 사용법 (0) | 2019.10.29 |
[Spring] 스프링 기초 - ViewResolver 설정 (0) | 2019.10.25 |
[Spring] 스프링 기초 - Controller 여러개 맵핑하기 (0) | 2019.10.25 |
[Spring] 4. MVC 프로젝트 구조 및 생성 및 @Controller, @RequestMapping, @RequestParam, @PathVariable 등 (0) | 2019.10.24 |