tplan
127
2019-06-27 14:19:32
4
212

스프링 어노테이션 @qualifier에 대해서 질문합니다


스프링 입문자입니다...

@Autowired랑 같이 쓰이는 걸로 알고 있고요

@Autowired는 프로퍼티,생성자,메서드 위에서 다 적용이 되는데

@qualifier와 같이 쓰면 생성자 위에서는 여기는 쓰면 안되는 위치다라고 빨간줄이 그어지네요...

왜일까요? 

0
0
  • 답변 4

  • libedi
    677
    2019-06-27 15:45:27

    해당 애노테이션의 의미와 목적에 대해서 생각해보세요.

    @Autowired는 주입에 대한 애노테이션, 즉 표시입니다. 그래서 생성자에도 사용이 가능합니다.

    @Qualifier는 주입의 대상을 한정시키기 위한 애노테이션입니다. 생성자에는 여러 인자가 들어갈 수가 있습니다. 생성자에 달면 해당 인자에 어떤 bean이 주입되어야 하는지 모르겠지요? 그래서 그 인자들 각각에 대해 달아주어야 하고, 생성자에는 사용이 안되는 것입니다.

    1
  • tplan
    127
    2019-06-27 19:16:59

    아~~ 그럼 인자들에게 각각 부여하면 된다는 거죠? 예를 들면 아래와 같이

    @Autowired

    public WordRegisterService(@Qualifier("usedDao1") WordDao wordDao,@Qualifier("usedDao1") WordDao wordDao1  ) {

    this.wordDao = wordDao;

    }

    인자들 앞에 @Qualifier를 붙이니 빨간줄은 사라졌습니다

    그런데 좀 아이러니 한게 인자에 어떤 Bean이 들어갈지 몰라서 안된다고 하셨는 데 
    그걸 한정시켜주는 게 @qualifier 역할 아닌가요?

    인자가 여러개라면 각각 달아줘야겠지만 한개라면 걍 위에서 하게 해줘도 되는거 아닌가.....라고

    억지를 부려봅니다^^;;;;

    감사합니다

    0
  •  (づ。◕ ܫ ◕。)づ
    4k
    2019-06-28 08:10:04

    @Autowired의 주입 순서를 살펴봐요

    그러면 @Qualifier 쓰는 이유가 명확해질거에요

    1
  • libedi
    677
    2019-07-01 12:14:32

    애노테이션을 만들어보시면 아시겠지만,

    생성자에 허용을 하게 되면 런타임시에 문제가 발생할 수 있습니다.


    말씀하신대로 생성자에도 생성이 가능하게 한다고 봅시다.

    그럼 여러 인자가 있는 생성자의 경우에 개발자가 생성자에 @Qualifier 애노테이션을 달았습니다.

    컴파일시에 문제가 발생하지 않아 그대로 커밋하여 서버에 올렸다고 합시다.

    (사실 그전에 로컬에서 테스트 하겠지만, 최악을 가정하여)

    그럼 서버 구동시에 오류가 발생하게 됩니다.


    오류는 가급적 런타임시에 발생하지 않도록 하는 것이 좋습니다.

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