본문 바로가기

Web/Spring

[ Spring ] ⑥ 스프링 애너테이션 기능

# 1. 스프링 애너테이션이란?

(1) 스프링 애너테이션(Annotation)

  • 기존에 XML에서 하던 빈 설정을 애너테이션을 이용해서 자바 코드에서 설정하는 방법
  • 기능이 복잡해짐에 따라 XML에서 설정하는 것보다 유지 보수가 유리하다
  • 현재 애플리케이션 개발 시 XML 설정 방법과 애너테이션 방법을 혼합해서 사용한다.

 

(2) 스프링 애너테이션 제공 클래스

  • 브라우저 URL 요청 처리 애너테이션 관련 클래스
클래스 기능
DefaultAnnotationHandlerMapping 클래스 레벨에서 @RequestMapping을 처리합니다.
AnnotationMethodHandlerAdapter 메소드 레벨에서 @RequestMapping을 처리합니다.

 

(3) <context:component-scan> 태그 기능

  • 이 태그를 사용해 패키지 이름을 지정하면 애플리케이션 실행 시 해당 패키지에서 애너테이션으로 지정된 클래스를 빈으로 만들어 준다
  • 사용형식 : <context:component-scan base-package="패키지 이름" />
  • 여러가지 스테레오 타입 애너테이션
애너테이션 기능
@Controller (스프링 컨테이너가 component-scan에 의해 지정한 클래스를) 컨트롤러 빈으로 자동 변환합니다.
@Service (공통) 서비스 빈으로 자동 변환합니다.
@Repository (공통) DAO 빈으로 자동 변환합니다.
@Component (공통) 빈으로 자동 변환합니다,

- component-scan 사용 예제

더보기
component-scan 예제

 

# 2. 메소드에 @RequestParam 적용하기

(1) @RequestParam

  • 매개변수의 수가 많아지면 일일이 getParameter() 메소드를 이용하는 것은 불편하다
  • @RequestParam을 메소드에 적용해 쉽게 값을 얻을 수 있다.
  • RequestParam 예제
더보기

(1) form 태그를 통해 요청을 보내고

 

(2) RequestMapping 애너테이션을 이용하여 Request를 처리한다.

 

(2) @RequestParam의 required 속성 사용하기

  • @RequestParam 적용시 required 속성을 생략하면 기본 값은 true이다
  • required 속성을 true로 설정하면 메소드 호출시 반드시 지정한 이름의 매개변수를 전달해야된다. (매개변수가 없으면 예외 발생)
  • required 속성을 false로 설정하면 메소드 호출 시 지정한 이름의 매개변수가 전달되면 값을 저장하고 없으면 null을 할당한다.
  • required = false
더보기

required 속성을 명시적으로 false로 설정한다.

 

(3) @RequestParam 이용해 Map에 매개변수 값 설정하기

  • 전송되는 매개변수의 수가 많을 경우 Map에 바로 저장해서 사용하면 편리하다
  • Map 이용하기

 

(4) @ModelAttribute 이용해 VO에 매개변수 값 설정하기

 

(5) Model 클래스 이용해 값 전달하기

Model 클래스

  • Model 클래스를 이용하면 메소드 호출 시 JSP로 값을 바로 바인딩하여 전달 가능
  • Model 클래스의 addAttribute() 메소드는 ModelAndView의 addObject() 메소드와 같은 기능 수행
  • Model 클래스는 따로 뷰 정보를 전달할 필요가 없을 때 사용하면 편리함.

 

(6) @Autowired 이용해 빈 주입하기

  • setter를 사용할 필요가 없어졌다.
  • @Autowired 를 이용해 빈 주입

 

# References

  1. 자바 웹을 다루는 기술

'Web > Spring' 카테고리의 다른 글

[ Spring ] ⑦ 메이븐과 스프링 STS  (0) 2019.08.13
[ Spring ] ⑤ 스프링 JDBC 기능  (0) 2019.08.02
[ Spring ] ④ 스프링 MVC 기능  (0) 2019.08.01
[ Spring ] ③ AOP  (0) 2019.08.01
[ Spring ] ② DI와 IoC  (0) 2019.08.01