일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 알고리즘
- programmers
- 코틀린
- SW봉사
- 회고
- C++
- 정보처리산업기사
- 데이터베이스
- 시나공
- MYSQL
- BFS
- 공부일지
- CJ UNIT
- 코딩봉사
- 파이썬
- python
- 1과목
- 코딩교육봉사
- softeer
- 문제풀이
- 스프링
- java
- 백준
- 백준알고리즘
- 백준 알고리즘
- 프로그래머스
- 자바
- 소프티어
- kotlin
- SQL
- Today
- Total
JIE0025
[Spring] 어노테이션(Annotation)정의, 종류 본문
annotations이 무엇일까 사전에 검색해보니 주석이라고 뜬다.
스프링에서 어노테이션?
어떤 기능을 수행하도록 하는 주석 같은 느낌으로 이해하면 된다.
프로그램에 추가 정보를 제공하는 메타데이터(데이터를 위한 데이터) 의 역할이기도 한다
어노테이션(Annotation)은 클래스와 메서드에 추가되어 다양한 기능을 부여할 수 있는데
이를 활용한 예는 다음과 같다.
- 클래스 역할 정의
- Bean(스프링 객체) 주입
- getter setter 자동 생성
어노테이션의 장점
- 코드 량 감소
- 유지보수 good
- 생산성 증가
어노테이션 종류
@Component
개발자가 정의한 클래스를 Bean으로 등록하는 어노테이션
@Component
public class Student{
public Student(){
system.out.println("study")
}
}
@Component(value="std1")
public class Student{
public Student(){
system.out.println("study")
}
}
위의 경우 추가 정보가 없으므로 > Class 이름을 카멜케이스로 변경한것이 Bean id로써 사용된다.
아래의 경우 value를 통해 Bean의 이름이 지정된다.
@Bean
개발자가 제어 불가능한 외부 라이브러리를 Bean으로 만들때 사용
@Configuration
public class Config{
@Bean
public ArrayList<String> arr(){
return new ArrayList<String>();
}
}
ArrayList 와 같이
라이브러리를 Bean 으로 등록하려면
해당 라이브러리 반환하는 메소드를 만든 후 @Bean 어노테이션을 사용한다.
@Service
클래스가 서비스 역할을 한다고 명시하기 위해 사용
@Controller
클래스가 컨트롤러 역할을 한다고 명시하기 위해 사용
@RequestMapping
@RequestMapping(value = "") 형식이고, 요청이 들어온 URI와 value값이 일치할 때 해당 메소드를 실행한다.
Controller 객체 안 메서드, 클래스에 적용한다.
@controller 어노테이션으로 userController와 boardController 메소드를 사용한다고 한 후 예를 들어보겠다.
@Controller
public class userController {
@RequestMapping(value = "/user/userJoin.do", method = RequestMethod.GET)
public String userJoin(Locale locale, Model model) throws Exception{
// /user/userJoin 요청처리
}
@RequestMapping(value = "/user/userJoinAction.do", method = RequestMethod.POST)
@ResponseBody
public String userJoinAction(Locale locale,UserVo userVo) throws Exception{
// post method
// /user/userJoinAction 처리
}
}
@RequestMapping이 메소드 위에만 존재하기 떄문에 value에 전체 경로를 사용해 /user/userJoin 의 요청과
/user/userJoinAction 의 요청 두개를 처리하도록 한다.
@Controller
@RequestMapping("/board")
public class boardController {
@RequestMapping(value = "/boardList.do", method = RequestMethod.GET)
public String boardList(Locale locale, Model model,HttpServletRequest req, PageVo pageVo) throws Exception{
// get board list
// /board/boardList 요청 처리
}
@RequestMapping(value = "/boardListAction.do", method = RequestMethod.POST)
public String boardListAction(Locale locale, Model model,PageVo pageVo) throws Exception{
// post method
// /board/boardListAction 처리
}
}
컨트롤러 어노테이션 아래에 @RequestMapping("/board")를 해주었기 떄문에 boardController 클래스 아래에있는 모든 메소드는 /board 로 시작하는 요청을 처리한다.
따라서 아래 두 메소드는 각각 /board/boardList 와 /board/boardListActoin을 처리한다.
@ResponseBody (응답) , @RequestBody (요청)
@ResponseBody 를 사용하면 메서드 리턴 값이 View 출력이 아닌, HTTP Response Body에 직접 쓰여지게 되고,
return할 떄 JSON, XML과 같이 데이터를 반환한다.
위에 userController에 들어있었기 떄문에 다시 코드를 가져왔다.
@Controller
public class userController {
@RequestMapping(value = "/user/userJoinAction.do", method = RequestMethod.POST)
@ResponseBody
public String userJoinAction(Locale locale,UserVo userVo) throws Exception{
// post method
// /user/userJoinAction 처리
}
}
- 비동기 통신으로 동작해야할 때를 생각해보자.
클라이언트에서 서버로 요청메세지를 보낼때, 본문에 데이터를 담아서 보내고
서버에서 클라이언트로 응답메시지를 보낼때에도 본문에 데이터를 보내야하는데
본문이 바로 body이고
요청은 RequestBody , 응답은 ResponseBody를 담아서 보내게된다.
클라이언트가 필요한 데이터를 요청할 때에 JSON을 요청 본문에 담아 서버로 보내고,
서버에서 RequestBody를 이용해 http 요청 본문에 담긴 값을 자바객체로 변환및 저장한다.
서버에서 응답을 보내줄때 @ResponseBody를 이요해 http 응답 본문의 객체로 변환해 클라이언트로 보내준다.
@GetMapping
@RequestMapping(Method=RequestMethod.GET) 과 같은 역할
@PostMapping
@RequestMapping(Method=RequestMethod.POST) 와 같은 역할
@Autowired
org.springframework.beans.factory.annotation.Autowired
<타입>에 따라 bean을 알아서 주입해준다.
생성자 / setter / 필드
3가지 경우에 Autowired를 사용하는데
기본값이 true이기 때문에 의존성 주입 대상을 찾지 못할 경우 application구동 자체를 실패한다.
@Controller
public class BoardController {
@Autowired
boardService boardService;
@Autowired
UserService userService;
}
일단 중요한 어노테이션은 이정도로 정리해놓고 추가 설명이 필요한것들은 세세하게 글을 새로 써보곘다.
'백엔드 > 스프링, 스프링부트, JPA, Spring Webflux' 카테고리의 다른 글
[Spring] Spring Security 개념, 특징, 구조 (0) | 2022.10.06 |
---|---|
[Spring] JUnit 5 : 자바 테스팅 기반 프레임 (0) | 2022.09.29 |
[Spring] 게시판 만들기 - 3) Github 연동하기 (0) | 2021.09.18 |
[Spring] 게시판만들기 2) 스프링 STS 기본 설정 (tomcat server) (2) | 2021.09.18 |
[Spring] 게시판 만들기 - 1) STS4 설치와 프로젝트 생성 (4) | 2021.09.12 |