자동 설정
@SpringBootApplication
빈은 두 단계로 나눠서 읽힌다.
@ComponentScan
@EnableAutoConfiguration
@SpringBootConfiguration
사실상의 @Configuration
@ComponentScan
컴포넌트 애너테이션이 달린 클래스를 빈으로 등록한다.
@Component, @Configuration, @Repository, @Service, @Controller, @RestController
@EnableAutoConfiguration
컴포넌트 스캔으로 등록한 후 다시 한 번 빈을 읽어와 등록한다.
즉, 없어도 스프링 부트를 사용할 수 있다.
단, 웹 애플리케이션 설정을 꺼줘야 가능
결국 이것도 @Configuration을 가지고 있다.
spring.factories 라는 메타 파일을 읽어들인다.
메타 파일의 키 값을 보고 설정을 읽는다.
조건에 따라 빈이 생성되거나 생성되지 않는다.
예제
설정 만들기
우선 별도의 프로젝트를 새로 판다.
의존성을 추가한다.
@Configuration 파일을 작성한다.
src/main/resource/META-INF
에 spring.factories를 생성한다.안에 자동 설정 파일을 추가한다.
mvm install
을 실행한다.
설정 적용하기
기존 프로젝트로 돌아와 의존성을 적용하면 라이브러리가 나타난다.
Holoman을 어디서도 정의한 적이 없지만 사용할 수 있게 되었다.
설정 재정의 하기
하지만 빈을 다시 설정하려고 하면 기존 값 그대로 나온다
스프링 부트 2.1부터는 오버라이딩 하지 못하고 에러가 뜬다.
컴포넌트 스캔이 먼저 동작한다
@Bean이 먼저 동작한다.
@AutoConfiguration으로 다시 등록한다.
@Bean 내용을 덮어 쓴다.
다시 설정 프로젝트 쪽으로 돌아가서 @ConditionalOnMissingBean을 달아준다.
@ConditionalOnMissingBean
해당 타입의 빈이 없을 때만 이 빈을 등록하라는 뜻이 된다.
설정 프로젝트에서 값을 설정할 때 빈에서 직접 하는 대신 properties에서 가져다 쓸 수도 있다.
본 프로젝트에서 properties에 값을 추가하면 그대로 반영된다.
Last updated
Was this helpful?