wonwonk
477
2018-10-19 15:56:49 작성 2018-10-19 15:59:27 수정됨
6
1435

spring bean 설정과 사용에 대한 궁금증


안녕하세요 spring에서 빈을 등록하여 사용하는 부분에 대한 궁금증이 나서 질문드립니다. 


보통 

 @Autowired

private CommonUtil commonUtil;

위처럼 CommonUtil 이라는 클래스를 commonUtil이라는 이름으로 사용한다. 라고 알고있습니다.

위 클래스가 자동으로 @Autowired 되기 위해서는 설정에서 스캔을 해놓아야 사용이 되고요 


헌데 xml 설정에서 빈을 개별로 설정하려면

<bean id="commonUtil" class="com.CommonUtil "></bean>

요렇게 수동으로 설정해놓고 사용을 할땐 마찬가지로 @Autowired 사용하여 맨 위처럼 하면 

동일 하게 사용되는것으로 알고있는데요 

궁금한게 bean id = "" 여기에 설정된 빈 id 는 쓸모가 없는건가요? 

만약 

<bean id="commonUtil" class="com.CommonUtil "></bean>

<bean id="commonUtil2" class="com.CommonUtil "></bean>


이런식의 설정이라면 commonUtil2 이 이름으로 된 빈을 사용하려면 어떻게 해야되는지 궁금합니다.


1
  • 답변 6

  • ghkdwls30
    2k
    2018-10-19 16:02:11

    일단 간략하게 설명을 드리자면 @Autowired해서 빈을 주입하는 방식은

    스프링 3.0부터 지원하는 어노테이션방식입니다.

    그리고 하단에 기술하신 XML에 Bean을 정의하는 방법은 2.5에서 사용하는 방식이구요.

    지금 스프링 4.0 임을 감안할 때 중요도가 어느게 더 높은지는 아실 것 같고.


    일단 질문에 답변을 드리면 똑같이 쓰시면됩니다.


    기본적으로 The default autowiring in spring is by type

    스프링은 타입에 따라 DI (의존주입)을 합니다. 


    따라서 소스코드에서 아래와 같이적어주시면됩니다.


    private CommonUtil commonUtil;

  • 유글레나
    534
    2018-10-19 16:05:14

    스프링의 Autowired는 기본적으로 타입이 동일한 객체를 우선적으로 찾습니다. 그 다음에 후보군이 없을때 Qualifier를 통해서 정의된 ID의 Bean을 찾습니다.

    위의 상황이면 @Autowired만 붙일경우 타입이 중복이라서 에러가 발생하게 됩니다. 때문에 @Qualifier를 통해서 id 값을 지정해주어야 하구요..


    기본적으로 자바컨피그는 해당ID를 자동으로 생성하도록 되어있습니다. ㅇxml에서는 이를 생략해도 기동이 되는지는 확인이 필요할 듯 하네요.


  • wonwonk
    477
    2018-10-19 16:09:45 작성 2018-10-19 16:12:10 수정됨

    ㄴ 답변 감사합니다. 

    다른 ID 의 동일 클래스의 빈이 있을 경우 

    <bean id="commonUtil" class="com.CommonUtil "></bean>

    <bean id="commonUtil2" class="com.CommonUtil "></bean>


    소스에서는 

    @Qualifier("빈아이디")

    private CommonUtil  commonUtil 


    같이 사용하면 된다는 말씀이신거 같습니다.

    제가 이해한게 맞나요 ?

  • ghkdwls30
    2k
    2018-10-19 16:12:23

    같은 타입이 두개니까 스프링이 자동주입할때 헷갈려합니다


    어떤걸 주입하지? 네 그래서 그거해주시면되요

  • 안개짱
    2018-10-19 16:16:28

    참고로 같은 타입이지만 빈등록시점에 속성을 달리하여 여러개 등록하고 쓸때 id 지정하고 Qualifier 로 하면 됩니다.


    생성자의 인자를 달리주어서 Type은 같으나 내용은 다른 Bean을 등록 할 수 있습니다.

  • wonwonk
    477
    2018-10-19 16:18:03

    ㄴ답변 달아주신분들 모두 감사합니다. 

  • 로그인을 하시면 답변을 등록할 수 있습니다.