샨샨 2020. 11. 25. 22:02
반응형

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]

 

 

 

 

 

 

반응형