ABOUT ME

dkcmsadkcmsa@gmail.com

Today
Yesterday
Total
  • 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

    댓글

Designed by Tistory.