이번 글에서는 @Component와 이 어노테이션이 어떻게 인식이 되며, 어떻게 사용되는지 알아보도록하자. 1. @ComponentScan의 범위
아래 그림에서는 DemoApplication 클래스가 @ComponentScan을 가지고 있기때문에 해당 클래스가 위치한 디렉토리인 com.example.demo 이하의 경로에 있는 범위를 스캔하는 것이다. SpringBoot에서는 main 메소드를 가지고 있는 클래스에 @SpringBootApplication 어노테이션을 명시하는데, @SpringBootApplication을 ctrl+왼쪽마우스클릭하여 들어가보면 아래와 같이 확인할 수 있다. @SpringBootApplication의 어노테이션에 내재된 어노테이션들@ComponentScan의 중요한 포인트는 스캐닝할 범위와 범위안에서 어떠한 타입을 제외시킬 것인가? 이다.
기본적으로 @Component 어노테이션을 명시한 클래스들이 Bean으로 등록이 되는데, 2. 프로젝트 구동완료 후 Bean 등록하기컴포넌트 스캔을 할때,
아래와 같이 @SpringBootApplication가 명시된 DemoApplication 클래스의 디렉토리 범위가 아닌 그 외에 디렉토리에 있는 클래스가 있다. 컴포넌트 스캔의 범위 밖인 AnotherBean위의 AnotherBean을 프로젝트 구동 이후에 등록하기위해 DemoApplication 클래스의 main 메소드 코드를 수정하도록하자.
위와 같이 ApplicationContextInitializer의 registerBean 메소드를 이용하여 AnotherBean을 등록하고, 빈이 제대로 등록되는지 확인할 수 있도록 AnotherBean의 코드를 아래와 같이 작성해두도록하자.
코드 작성을 완료하고 프로젝트를 다시 시작하면, Function을 사용한 Bean 등록 결과제대로 Bean등록이 된것을 확인할 수 있다. 내용 출처
|