IoC(Inversion of Control)컨테이너의 사용
- 어노테이션을 이용한 객체주입
- 컨테이너가 어노테이션 기호를 보고 객체를 생성해서 자동으로 연결시켜준다.
- 스프링컨테이너가 생성될때 설정파일에 등록된 패키지를 스캐닝해서 어노테이션 기호가 추가된 객체들을 생성하고 관계를 설정한다.
- 컨테이너가 생성될때 특정 패키지를 읽어서 작업해야 하므로 <context:component-scan> 태그를 이용해서 생성하고 싶은 객체가 있는 패키지를 등록해야 한다.
- 생성자, 필드, setter메소드를 통해서 주입받을 수 있다.
- 빈생성
스프링 컨테이너가 관리할 수 있도록 하려면
@component : 기본빈으로 정의하고 등록할때
@Service : 서비스 역할을 하는 빈을 등록
@Repository : db연동을 위한 빈을 등록
@Controller : 스프링웨 MVC에서 사용하는 컨트롤러로 등록
⇒ <bean></bean>으로 등록하는 것과 동일
⇒ 빈의 이름을 등록하지 않으면 클래스의 첫 글자를 소문자로 바꾼 이름으로 등록한다.
- 객체연결
@Autowired : 같은 타입의 빈이 컨테이너 내부에 존재하면 자동으로 연결
같은 타입의 빈이 2개 이상 있는 경우 어떤 빈을 매칭해야 하는지 찾을 수 없다
@Qualifier : 같은 타입의 빈이 여러 개인 경우 정확하게 매칭시킬 빈의 이름을 명시해야 한다.
스프링 MVC의 구조
- 스프링 MVC는 역할을 분리
- 기본으로 frontController패턴이 적용됨
- 이 모든 구성 요소가 내부에서 웹 요청을 위해 동작하고 각각의 상황에 맞게 작업할 수 있도록 HandlerMapping, ViewResilver, View등은 다양하게 여러개가 제공
- 사용자가 설정파일에 정의하지 않으면 기본으로 처리되는 컴포넌트들이 미리 정해져있다.
- 뷰를 요청하는 것도 스프링을 통해서 실행되도록 처리
- DispatcherServlet : 클라이언트의 요청을 받아서 요청을 분석하고 spring MVC 구조를 구성하는 컴포넌트를 호출해서 작업
- HandlerMapping : DispatcherServlet이 전달한 매핑정보(요청path)를 이용해서 실행할 컨트롤러를 찾아서 DispatcherServlet에 전달
- HandlerAdapter : DispatcherServlet에서 전달받은 컨트롤러를 실행하고 실행결과를 DispatcherServlet에 넘겨주는 작업을 수행 ModelAndView객체로 만들어서 리턴 (Model과 View에 대한 정보를 담고 있는 객체)
- Controller : 개발자가 웬에서 처리하고 싶은 내용을 기술 (서블릿에서 작업했던 내용을 컨트롤러에서 작업) 이전 버전에서는 Controller의 역할을 하기 위해 상속받아야 하는 클래스와 인터페이스가 존재, 3.0이후부터는 어노테이션으로 작업하면서 기본클래스로 작업이 가능 (@Contriller어노테이션을 반드시 추가해야 함) 서블릿과 다르게 컨트롤러에 모든 내용을 넣지 않고
컨트롤러 → 서비스 → DAO 의 구조로 개발
- ViewResolver : DispatcherServlet이 넘겨준 뷰의 정보를 기반으로 설정파일에서 어떤 뷰를 만들어야 하는지 정보를 찾아서 넘겨주는 작업
- View : 실제 응답할 뷰를 만들어 리턴
컨트롤러
- spring mvc 프레임워크에서 웹에서 서비스 되도록 하려면 컨트롤러를 만들어야 한다.
- 컨트롤러로 인식되기 위해서 @Controller를 클래스 위에 추가
- 메소드를 정의해서 처리하고 싶은 일들을 처리하도록 작업
- 메소드 정의
- 메소드명은 사용자 정의로 작성
public 리턴타입 메소드명 (매개변수…) {
// 서블릿에서 처리하던 작업을 구현
}
- 리턴타입
- 허용되는 타입 안에서 원하는 타입을 정의
- String : view에 대한 정보만 명시, InternalResourceViewResolver인 경우 prefix와 suffix가 결합해서 뷰의 정보를 생성하므로 폴더명과 뷰 이름을 결합해서 리턴정보를 작성
- ModelAndView : Model과 View의 정보가 모두 저장된 객체
- Model : 웹페이지에서 공유할 데이터
- 허용되는 타입 안에서 원하는 타입을 정의
- 매개변수
- 허용되는 타입 안에서 원하는 타입을 정의
- 메소드 선언부 위에 매핑정보를 정의
- @RequestMapping 을 이용해서 정의
@RequestMapping(”/main”)
public String test() {
return “main/test”;
}
⇒ 클라이언트가 /context명/main으로 요청하면 test메소드를 실행하겠다는 의미
- 메소드명은 사용자 정의로 작성
'코딩딩 > Spring' 카테고리의 다른 글
객체와 테이블 매핑 (1) | 2023.10.31 |
---|---|
JPA의 준영속 상태 (0) | 2023.10.31 |
Spring 기초 (0) | 2023.09.16 |
JDBC (1) | 2023.09.08 |
서블릿 (0) | 2023.09.06 |