Spring Annotation
Annotation은 spring framework에서 의존성 주입(Dependency Injection)을 위해 사용된다.
개념
◇자바 소스코드에 @Annotation의 형태로 특별한 기능 표현
◇Spring에서 DI, Bean등록, 탐색 등에 사용됨
◇클래스, 메소드, 필드 선언에서 사용됨
◇컴파일 과정에서 Annotation 정보로 코드 자동 생성
사용하는 목적
◇어플리케이션이 커질수록 XML설정 작업이 복잡해서 사용 (수정작업이 어려움)
◇자바 소스코드에서 필요한 곳에 annotation을 사용해 코드의 가독성을 향상시킨다.
◇사용법이 간단하다.
Annotation 설정
root_context.xml 파일에서 context namespace 이용
component scan 설정 : 현재 base-pakage로 주어진 클래스의 모든 하위 클래스들의 annoation을 bean으로 등록
Bean등록 annotation
@Component
- Spring이 Bean으로 등록하는 가장 기본적인 annotation
- 기본 생성자가 반드시 필요
@Controller
- 웹 요청과 응답을 처리하는 클래스
@Service
- 비즈니스 로직을 가지는 클래스
@Repository
- 파일이나 데이터베이스를 처리하는 클래스 (DAO)
DI Annotaion : 의존성 주입을 위해 사용하는 annotation
@Autowired
- 생성자, 멤버함수, 멤버변수위에 생성
- Bean으로 생성된 개체중에 같은 타입의 객체를 찾아 멤버변수에 자동 주입
- @Inject 로 대체 가능
주소(URL) 매핑
@RequestMapping
- http request로 들어오는 url을 특정 controller 클래스나 메소드로 연결시키는 역할을 함
- 특정 class, 혹은 메소드에 적용
- 예를 들어, @RequestMapping("/view") 라면 hostname:port/home/view/ 에 해당하는 페이지에 대응하는 역할을 한다.
- 한번에 여러개의 페이지에 대응하는 Multiple URI 도 가능
- Multiple URI 예시 : @RequestMapping(value={"", "/view", "view*","home/*,**/info"})
@GetMapping
- HTTP GET 요청을 처리하는 메서드를 mapping 하는 annotation (@RequestMapping의 역할과 유사)
- 주소에 파라미터가 노출된다.
- @GetMapping("/home") 의 형식으로 사용할 수 있음
- 메소드에만 적용
@PostMapping
- HTTP POST 요청을 처리하는 메서드를 mapping 하는 annotation (@RequestMapping의 역할과 유사)
- 주소에 파라미터가 노출되지 않는다.
- 메소드에만 적용
- @PostMapping("/home")의 형식으로 적을 수 있음. (매핑 주소가 정확하고 requestmapping 보다 짧아 가독성 좋음)
기타
@RequestParam : 파라미터 요청
- @ReuqestParam 어노테이션은 HttpServletRequest 객체와 같은 역할을 함
- getParameter() 메소드를 이용하는 대신 @RequestParam 어노테이션을 사용
- @RequestParam("가져올 데이터의 이름") [데이터타입] [가져온데이터를 담을 변수] 의 형태
이름 | 타입 | 설명 |
name, value | String | 파라미터 이름 |
required | Boolean | 해당 파라미터 필수 여부, default = true |
defaultValue | String | 해당 파라미터 기본값 |
예시 ) public String home(@RequestParam(value="id", defaultValue="false") String id)
@PathVariable
- 조금 더 깔끔한 URL를 만들 수 있다.
- @RequestMapping 의 URL에서 ({})에 명시된 변수를 받아온다.
예시)
@RequestMapping("/home/{key1}/{key2}") 일 때,
public void resultByPath(@PathVariable String key1, @PathVariable String key2) {}안에 명시된 변수값을 받아온다.
@RequestBody
- POST형식에서 사용
- Http 요청의 Body내용을 Java Object로 변환시켜주는 역할
- Json이나 XML과 같은 형태의 데이터를 Jackson 등의 MessageConverter를 활용하여 Java Object로 변환
예시)
@RequestMapping(value="/member/login", method = RequestMethod.POST)
public MemberResult login(@RequestBody Member member)
@ModelAttribute
- 클라이언트가 전송하는 여러 파라미터들을 1대1로 객체에 바인딩하여 다시 View로 넘겨서 출력하기 위해 사용되는 오브젝트
- 파라미터로 넘겨 준 타입의 오브젝트를 자동으로 생성한다.
생성된 오브젝트에(info) HTTP로 넘어 온 값들을 자동으로 바인딩한다.
예시) public String modelAttribute(Model model, @ModelAttribute BoardVO boardVO)
☞ @ModelAttribute는 Form태그를 통해 전송받은 파라미터들을 Java 객체로 매핑시킨다.
출처: https://developer-joe.tistory.com/197 [코드 조각-Android, Java, Spring, JavaScript, C#, C, C++, PHP, HTML, CSS, Delphi]