DefaultAnnotationHandlerMapping : @Controller 어노테이션 붙이면 해당 url로 이동 => 현재 우리가 사용한 기술과거 : Spring web MVC가 없을 때는 각 요청에 따라 Servlet파일 필요현재 : Spring web MVC가 있기 때문에 Dispatcher Servlet이 다 처리 해줌 -> 넘나 편리한것~Container
- 정의 : 주입을 이용히여 객체를 관리하는 역할을 수행
- 역할
- 1개 이상의 Bean 객체, 관계, 사용, 생명주기등을 관리 해준다.
- 객체 생성, 연결, 설정, + 전체 생명주기 관리
- 종류
- BeanFactory : 빈 객체를 생성 및 관리 -> Factory pattern을 사용
- Ex : BeanFactory factory = new XmlBeanFactory(new FileInputStream(bean.xml))
- MyBeanClass bean = (MyBeanClass) facotry.getBean(myBeanClass)
- Application Context : BeanFactory 에서 아래로 상속 받아서 기능을 추가
- 생성 과정
- 톰캣이 실행되면 ContextLoaderListner가 contextLoader()메서드 실행 -> contextConfigLocation으로 applicationContext.xml 파일 읽어옴
- Root Applicaiton Context 생성
- 설정파일을 스캐닝 하여 객체 생성(Bean -> Repository, Service)
- DispatcherServlet은 Spring-servlet.xml 파일을 읽어서 어노테이션 scaning 하여 Web Application Context 컨테이너에 저장 -> Root Context에있는 객체를 가져와서 DI 가능
- 요청 처리
- key point : context는 하나의 container이며 해당 container는 bean을 관리해준다 그리고 root, web application container로 나눠서 관리 -> web application context 는 root context의 Bean에 접근 가능(Autowired 사용)
이거 공부할 때 삽질
Bean과 Container Servlet 각각의 이해는 잘했었다 하지만 연결 고리가 너무 어색했었다 -> (Spring 실행 -> Linstener (root context) -> Filter -> servlet 순으로 생성) 이것을 몰랐기 때문에 연결 고리가 형성 되지 않아 많이 힘들었다. -> 과거를 회상하다 보니 이런 구조를 가졌기 때문에 filter에서 Repository Bean 접근 가능하다는게 말이 돼기 시작했었다 -> security 나중에 회고록 참고