검색결과 리스트
글
LANGUAGE/SPRING
2020. 3. 11. 12:24
갑자기 Spring4 소스를 분석해야 하는 친구를 위한 간단정리
(특정 소스를 분석하여 다른언어의 지식이 있는 Spring알못에 맞춰 열거적으로 개념을 설명한 노트이다.)
Spring ?
- Java로
MVC패턴의 WebApplication을 쉽게 만들 수 있는FrameWork - 전체적인 그림
[View] <=> [ @Controller -> @Service -> @Repository -> MyBatis(.xml) ] <=> [DataBase]
1. Controller
@Controller
- 특징
- 주로 페이지 호출을 위한 Controller
- 주소(URL) =
DOMAIN+ContextPath+Class의 RequestMapping("A")+Method의 RequestMapping("B") - 각 Method에서 무슨 일이 생기고 있는 거야 ??
Model model: (매개변수로 정의되었을 때) 특수한 객체로 JSP에서 사용할 수 있는 변수를 다룬다.- 매개변수로 정의되는 몇몇 특수한 객체를 제외하고는 화면에서 보낸 값들을 매개변수에 자동으로 매칭시킨다.
@RequestParam(".."): 스프링이 화면에서 던져주는 변수명과 매칭되는 곳에 자동적으로 값을 넣어주지만, 개발자의 의도에 따라 다른 변수에 매핑시키도록 함@PathVariable(".."): @RequestMapping의 문자값 속에 {}로 선언된 부분의 명칭을 사용하여 매개변수에 매핑시키면 => URL중 해당부분에 사용자가 적은 값을 매핑시킴@ModelAttribute(".."): 선언한 매개변수를 해당 명칭으로 Model객체의 속성으로 자동 추가
- View페이지 출력 정의가 어딨어 ?
return "주소..": 해당경로의 JSP파일을 호출!return 이 없넨 void네?: 현재 호출된 RequestMapping주소 경로의 JSP파일을 호출!return "redirect:주소..": 해당 주소의 Controller를 이어서 호출!
- View페이지가 어떻게 호출되는 거야 ???
web.xml에 사용할 스프링 설정파일이 설정되어 있음- 설정파일(
PATH/TO/servlet-context.xml)을 보면- =>
InternalResourceViewResolver에 의해 prefix로는/WEB-INF/views/, surfix로는.jsp.. 이런식으로 설정- => 따라서 특정 주소가 호출되면
Controller를 거쳐 =>[prefix + 호출주소 + surfix]의 파일을 가공하여HTML로 만들어 사용자에게 제공됨
- => 따라서 특정 주소가 호출되면
- =>
- 데이터를 다루는 Controller의 Method
@ResponseBody가 선언된 Method는 Data를 받기 위한 Request매핑임. (Page호출X)@RequestBody가 선언된 매개변수(객체)는POST방식의 호출로 받은 Body값들을 주입받는다.return시 값을 전달한다. (Page호출X)
@RestController
- 특징
- Data API목적으로 설계된 Controller이다. (Page호출X)
- 위 @ResponseBody가 Method마다 자동으로 붙는다 생각하면됨 (따로 @ResponseBody를 선언하지 않아도 되는 장점)
- 주로 화면에서는 데이터처리를 위해
Ajax를 이용하여 이곳으로 호출.
2. Service
@Service
- 특징
- Interface가 존재 - (장단점도 있긴한데 상황에 따라 말도 많지만 일단 기계적으로 사용한다 생각하길)
- Interface를 Implements한 Class가 따로 존재.
- Controller단(또는 다른 어떤곳)에서 이를 참조하여 사용할시 Interface Class를 선언하여 사용. (그리고 @Inject 또는 @Autowired를 위에 선언하면 스프링이 참조시킴)
- 주로
@ControllerClass 와@RepositoryClass 사이에서데이터를 가공하는 중추적인 역할을 한다. - 단순하게 만들 때는
@RepositoryClass 로 가는 길목이 되기도 한다.
3. Repository
@Repository
- 특징
- Interface가 존재
- Service단에서 이를 참조하여 사용할시 Interface Class로 선언하여 사용. (그리고 @Inject 또는 @Autowired를 위에 선언하면 스프링이 참조시킴)
~DAO라는 명칭을 주로 사용한다.MyBatis라 하여Mapper(xml파일)에 따로Query문을 소스코드와 분리하여 관리하는 구조의 모듈이다. (많이 사용한다)- 설정파일(
PATH/TO/root-context.xml)을 보면DriverManagerDataSourceClass를 보면DB연결정보관리중SqlSessionFactoryBeanClass를 보면 Query와 WebApplication에서Data를 받기위한 객체설정과Mapper(xml)파일 위치를 관리 중
'LANGUAGE > SPRING' 카테고리의 다른 글
| [Spring] XSS 방지하기 - OWASP AntiSamy Project (0) | 2020.10.26 |
|---|---|
| [잡담] 스프링! 한글과 비견될 수 있을까? .. (0) | 2020.03.09 |
| [MyBatis] Java 함수사용하기 (0) | 2017.03.27 |
| [SpringBoot] logging (0) | 2016.05.11 |
| [Spring] SessionStatus (0) | 2016.03.09 |