-
Spring 어노테이션Java/Spring 2019. 5. 20. 10:00
■Annotation
- 사전적 의미는 '주석'이다.
- 일반 자바 어플리케이션에서는 프로그램 실행에 직접적인 영향이 없는
주석의 역할을 충실히 수행하지만 스프링에서는 단순 주석을 넘어 막강한 영향을 끼치는
코드 장치(?) 라고 볼 수 있다.
■bean이란?
- 자주 사용될 클래스들은 아예 처음부터 하나만 미리 만들어 놓고 그 객체를 여러
클래스에서 참조해 사용하면 훨씬 경제적이고 효율적이기 때문에 등장하게 된 개념!
이런 클래스를 bean 클래스라고 부른다.
- 클래스를 bean으로 등록시키는 어노테이션과 그렇지 않은 어노테이션으로 구분해서
아래에 정리해 봤다.
■bean으로 등록되는 Annotation
- @Component
- 클래스들이 스프링의 component-scan기능에 의해 스캔되어
bean으로 등록되게 하는 어노테이션
- 스캔 범위
- 스프링 프레임워크는 src/main/resources/applicationContext.xml파일 내의
component-scan 선언에 지정된 패키지 하위의 클래스들을 스캔한다.
- 스프링 프레임워크의 스프링 부트 프로젝트에서는 @SpringBootApplication
어노테이션이 선언된 클래스 패키지 하위의 클래스들을 대상으로 스캔한다.
- 아래에서 설명할 @Controller, @Service, @Repository 어노테이션들은 모두
@Component를 상속하고 있다. 다시 말해서 @Controller, @Service, @Repository가
선언된 클래스 역시 프레임워크에 의해 스캔되어 bean으로 등록된다.
- @Controller(@RestController)
- @Repository
- @Service
- 참고
- @Component와 위의 @Component를 상속하고 있는 Annotation들 모두 bean으로
등록되기 때문에 자칫 '어차피 아무 Annotation이나 써도 bean 등록 돼서 기능 실행은
되는거 아냐?' 라고 생각할 수 있다.
하지만 역할 분담이라는 가독성과 각 역할에 AOP 로직을 쉽게 붙이기 위해서라도
구분하여 사용하는 것이 좋다.
(여러 로직이 섞여 있는 메소드를 유지보수와 가독성 등을 위해 잘게 나누는 것과 비슷)
- 또한 각 어노테이션별로 추가적인 기능이 있는 경우도 있어서
구분이 필수인 경우도 있다. ex) @Controller의 @RequestMapping 등
- 따라서 @Component는 @Controller, @Service, @Repository 세 어노테이션이
필요한 경우 이외의 클래스에만 사용하는 것이 좋다.
■bean으로 등록되지 않는 Annotation
-@Autowired(@Qualifier)
-@Resource
-@Inject
-@Required
출처:
https://duzi077.tistory.com/310
https://engkimbs.tistory.com/682
https://sieunlim.tistory.com/10 [개발노트]
https://doublesprogramming.tistory.com/105
https://gmlwjd9405.github.io/2018/12/02/spring-annotation-types.html
'Java > Spring' 카테고리의 다른 글
@ControllerAdvice와 @ExceptionHandler (0) 2020.07.27 xss (0) 2019.05.07 IOC (DI) (0) 2019.04.06 스프링이란 (0) 2019.04.06 프레임워크vs라이브러리 (0) 2019.04.06