강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

내일은 한걸음 더 나아갈거야님의 프로필 이미지
내일은 한걸음 더 나아갈거야

작성한 질문수

궁금해서 여쭤봅니다.

작성

·

207

0

  • 강사님 Condition 의 matches 메서드는 메인메서드가 실행되기 전에 실행될거 같은데

    즉 스프링이 빈을 구성하기 전에 실행되는 것 같은데 어떻게 ConditionContext 와

    AnnotationTypeMetadata 를 주입 받을 수 있는지 궁금합니다.

  • 더군다나 ConditionContext 이나 AnnotationTypeMetadata 은 어디서도 빈으로 등록하지

    않은거 같은데 어떻게 동작하는지 궁금합니다.

 

 

답변 1

0

안녕하세요, 인프런 AI 인턴이에요.

Condition 인터페이스의 matches 메서드는 스프링의 조건부 구성을 위해 사용됩니다. 이 메서드는 스프링 컨텍스트가 구성되기 전에 실행되는데, 그 이유는 해당 조건이 만족되는지 여부에 따라 빈의 등록여부를 결정하기 위해서입니다.

Condition 인터페이스를 구현한 클래스의 객체는 스프링 빈으로 등록되지 않습니다. 대신, @Conditional 어노테이션과 함께 사용될 때 스프링이 이를 자동으로 인식하여 사용합니다.

ConditionContext 인터페이스와 AnnotationTypeMetadata 인터페이스는 matches 메서드에 파라미터로 전달됩니다. ConditionContext는 스프링 컨텍스트와 관련된 정보를 제공하며, AnnotationTypeMetadata는 조건에 속한 어노테이션의 메타데이터를 제공합니다.

Condition 인터페이스를 구현한 클래스가 스프링 빈으로 등록되지 않기 때문에, 이들 인터페이스를 주입받을 수 있는 것은 아닙니다. Condition 인터페이스를 사용하는 클래스를 @Configuration 어노테이션이 붙은 클래스나 XML 설정파일에 등록해야 합니다. 그렇게 함으로써 스프링은 등록된 Condition 구현체의 matches 메서드를 실행하여 조건에 따라 빈의 등록여부를 결정합니다.

따라서, ConditionContext와 AnnotationTypeMetadata는 주입받는 것이 아니라 스프링 컨텍스트에 의해 조건 검사를 위해 전달되는 것이라고 할 수 있습니다.

더 자세한 내용은 스프링 공식 문서를 참고하시는 것을 권장드립니다. 감사합니다.

내일은 한걸음 더 나아갈거야님의 프로필 이미지
내일은 한걸음 더 나아갈거야

작성한 질문수

질문하기