Programming/For interview

[Java/Spring] 리플렉션이 DI컨테이너에서 동작되는 과정

LazyCat 2025. 1. 20. 12:03
반응형

DI 컨테이너에서 리플렉션의 실제 동작

(1) 클래스 정보를 로드

  • DI 컨테이너는 애플리케이션 시작 시, 관리할 클래스(스프링에서는 @Component, @Service 같은 어노테이션이 붙은 클래스)를 탐색합니다.
  • 리플렉션을 사용해 클래스의 정보를 읽어들입니다.

(2) 의존성 정보 추출

  • 리플렉션으로 클래스의 필드, 생성자, 메서드 등을 탐색하여 의존성을 추출합니다.
  • 예를 들어, 특정 필드에 @Inject 어노테이션이 붙어 있다면, DI 컨테이너는 해당 필드가 주입 대상임을 알게 됩니다.

(3) 객체 생성

  • 클래스의 생성자를 리플렉션으로 호출하여 객체를 생성합니다.
  • 예를 들어, UserRepository가 필요하면 DI 컨테이너는 UserRepository의 Class 객체를 이용해 런타임에 인스턴스를 만듭니다.

(4) 의존성 주입

  • 생성된 객체를 주입해야 할 대상 클래스의 필드나 생성자에 동적으로 삽입합니다.
  • 리플렉션은 setAccessible(true)를 통해 private 필드에도 접근할 수 있기 때문에, 코드의 변경 없이도 의존성을 삽입할 수 있습니다.

(5) 객체 관리

  • 주입된 객체들은 DI 컨테이너가 관리하며, 필요할 때마다 주입된 상태로 제공됩니다.

 

 

 

리플렉션은 자바 프로그램의 Runtime 시점에 특정 클래스의 메타 데이터를 추출할 수 있는 기법이다.

결론적으로 말하자면 Spring의 DI Container는 런타임 시점에 @Service @Component와 같은 어노테이션이 붙은

클래스를 탐색하여 런타임 시점에 정보를 읽어야 하므로 '리플렉션'을 사용하고

의존성 주입을 해야할 객체를 탐색할때도 런타임 시점에 정보를 읽어햐 하므로 '리플렉션'을 사용한다고 이해했다.

 

 

반응형