ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 토비의 스프링 3.1 - 빈 스캐닝과 자동와이어링
    Spring 2017. 8. 5. 14:48


    토비의 스프링 3.1의 내용을 요약한 자료입니다. 개념적인 설명만 요약하였으며 개념의 이해를 돕는 구체적인 코드 및 예제를 살펴보시려면 책을 참조하시기 바랍니다. 

    포스팅한 내용이 저작권의 문제가 발생할 수 있는 경우 게시물은 삭제/비공개 처리 될 수 있습니다.


    @Autowired를 이용한 자동와이어링


    - @Autowired는 스프링 컨테이너가 생성한 빈을 클래스의 멤버 필드로 주입받기 위해 사용한다.

    - 자바 코드를 통해 클래스로 정의한 빈 오브젝트는 @Autowired를 붙여줌으로 빈 오브젝트를 주입할 수 있다.

    - @Autowired가 분은 수정자 메소드가 있으면 파라미터 타입을 보고 주입 가능한 타입의 빈을 모두 찾는다. 주입 가능한 빈이 하나라면 스프링이 수정자 메소드를 호출해서 넣어주고 두 개 이상이 나오면 프로퍼티와 동일한 이름의 빈이 있는지 찾는다.

    - @Autowired와 같은 자동와이어링은 적절히 사용하면 DI 관련 코드를 대폭 줄일 수 있지만, 빈 설정정보를 보고 다른 빈과 의존관계가 어떻게 맺어져 있는지 한눈에 파악하기 힘들다는 단점도 있다.


    @Component를 이용한 자동 빈 등록


    - @Component 또는 @Component를 메타 애노테이션으로 갖고 있는 애노테이션이 붙은 클래스는 빈 스캐너를 통해 자동으로 빈으로 등록된다.

    - @Component 애노테이션이 달린 클래스를 자동으로 찾아 빈을 등록해주게 하려면 빈 스캔 기능을 사용하겠다는 애노테이션 정의가 필요하다. 

    - @ComponentScan 애노테이션은 @Component 애노테이션이 달린 클래스를 자동으로 찾아서 빈으로 등록해주는 빈 스캔 기능을 사용하겠다는 애노테이션 정의이다. 

    - @ComponentScan의 basePackages 엘리먼트는 @Component가 붙은 클래스를 스캔할 기준 패키지를 지정할 때 사용한다. 기준 패키지는 여러 개 넣어도 된다.

    - 빈의 클래스는 @Component가 붙은 클래스이고, 빈의 아이디는 따로 지정하지 ㅇ낳았으면 클래스 이름의 첫 글자를 소문자로 바꿔서 사용한다.

    - 만약 @Component가 붙은 클래스의 이름 대신 다름 이름을 빈의 아이디로 사용하고 싶다면 다음과 같은 애노테이션을 붙여주면 도니다. @Component("userDao")

    - 빈 자동등록은 @Component 애노테이션 뿐만 아니라 @Component 애노테이션을 메타 애노테이션으로 갖고 있는 애노테이션도 사용할 수 있다.

    - 애노테이션이 빈 스캔을 통해 자동등록 대상으로 인식되게 하려면 애노테이션 정의에  @Component를 메타 애노테이션으로 붙여주면 된다.

    - 여러 개의 애노테이션에 공통적인 속성을 부여하려면 메타 애노테이션을 이용해야 한다. 메타 애노테이션은 애노테이션의 정의에 부여된 애노테이션을 말한다. 

    - 애노테이션이 빈 스캔을 통해 자동등록 대상으로 인식되게 하려면 애노테이션 정의에 @Component를 메타 애노테이션으로 붙여주면 된다. 


    1
    2
    3
    4
    5
    @Component
    public @interface SnsConnector {
        ...
    }
     

    - @SnsConnector를 다음과 같이 클래스에 부여해주면 자동 빈 등록 대상이 된다.
    1
    2
    @SnsComponent
    public class FacebookConnector { 


    - 스프링은 DAO 기능을 제공하는 클래스에는 @Repository 애노테이션을 이용하도록 권장한다. @Repository는 @SnsConnector와 마찬가지로 @Component를 메타 애노테이션으로 갖고 있다. 
    - @Autowired는 같은 타입의 빈이 두 개 이상 발견되면 이름을 기준으로 다시 최종후보를 찾는 방식으로 동작한다. 
    - @Service 애노테이션은 스프링이 제공하는 빈 자동등록 애노테이션으로 비즈니스 로직을 담고 있는 서비스 계층의 빈을 구분하기 위해 사용된다. 
    - 수십, 수천개의 애플리케이션 빈을 다루는 엔터프라이즈 애플이케이션을 개발하는 경우 모든 빈을 XML이나 자바 코드에 일일이 설정해주려면 번거롭다. 대신 자동 와이어링과 자동 등록 방식을 적용하면 DI와 관련된 코드나 설정정보가 간결해질 것이다.


Designed by Tistory.