강의

멘토링

로드맵

Inflearn Community Q&A

blessdutch0244's profile image
blessdutch0244

asked

Toby's Spring Boot - Understanding and Principles

Separating Automatic Configuration Information Files

MyAutoConfigImportSelector 에서 생성자로 ClassLoader를 주입받을 수 있는 점

Written on

·

196

0

안녕하세요! MyAutoConfigImportSelector에 implements DeferredImportSelector만 해주었는데요! 따로 BeanClassLoaderAware 를 같이 implements 해주지 않았는데도, 어떻게 classLoader가 생성자로 주입이 가능한 지 궁금합니다! MyAutoConfigImportSelector가 Bean은 아닌것 같아서요!

springspring-bootspring-jdbc

Answer 1

1

tobyilee님의 프로필 이미지
tobyilee
Instructor

MyAutoConfigImportSelector는 EnableMyAutoConfiguration 애노테이션 정의에서 @Import로 지정되어있습니다. 여기서 @Import에 다음과 갈이 지정되어있어서 MyAutoConfigImportSelector를 스프링 컨테이너를 초기화하는 과정에서 마치 빈 처럼 취급해서 필요한 오브젝트를 주입 받고, 빈 등록 기능을 수행할 수 있도록 해줍니다.

image.png

ImportSelector는 좀 특별하게 취급되는 스프링 구성정보를 동적으로 만드는 컨테이너의 고유한 기능이라고 생각하시면 됩니다. @Import와 ImportSelector 인터페이스의 javadoc을 자세히 읽어보시면 도움이 될 겁니다.

 

ImportSelector 인터페이스의 문서를 읽어보면 다음과 같이 BeanClassLoaderAware 인터페이스를 추가해서 클래스로더를 주입 받도록 만들 수 있다고 되어있고요. ImportSelector 구현 클래스가 만들어져서 동작할 때 필요한 오브젝트를 제공해주는 것이지요. 예전엔 setter 메소드를 가진 인터페이스를 추가로 구현해줬지만, 스프링의 생성자 주입 방식을 따르면 생성자 파라미터로 정의하는 것만으로, 스프링 컨테이너가 만든 클래스로더가 적용이 됩니다.

 

image.png

 

 

 

blessdutch0244's profile image
blessdutch0244

asked

Ask a question