스프링 부트는 @ComponentScan, @EnableAutoConfiguration을 순서로 스프링 빈을 찾아내어 등록합니다.
@ComponentScan은 @ComponentScan이 선언된 곳의 하위 디렉토리에 선언되어 있는 @Repository, @Configuration, @Service등의 스프링 빈을 나타내는 annotation들을 bean에 등록해줍니다.
@EnableAutoConfiguration은 설정파일들을 참조하여 빈들을 등록합니다.
@Configuration - 스프링의 환경설정과 관련된 파일을 선언함. 이 곳에서 @Bean으로 빈을 설정합니다.
1) 빈이 중복되어 에러나는 상황
오류:
The bean 'holoman', defined in me.whiteship.Application, could not be registered. A bean with that name has already been defined in class path resource [me/whiteship/HolomanConfiguration.class] and overriding is disabled.
Action:
Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true
해결: application.properties 에 spring.main.allow-bean-definition-overriding=true 추가.
스프링부트2.1부터는 overriding옵션이 기본적으로 false로 되어있어서 그렇다고 함.
앱이 실행될 때 인자를 받아서 바로 실행하고 싶을 때 사용하는 인터페이스입니다.
package me.whiteship;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
@Component
public class HolomanRunner implements ApplicationRunner {
@Autowired
Holoman holoman;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(holoman);
}
}