자동 설정

@SpringBootApplication

빈은 두 단계로 나눠서 읽힌다.

  1. @ComponentScan

  2. @EnableAutoConfiguration

@SpringBootConfiguration

  • 사실상의 @Configuration

@ComponentScan

  • 컴포넌트 애너테이션이 달린 클래스를 빈으로 등록한다.

  • @Component, @Configuration, @Repository, @Service, @Controller, @RestController

@EnableAutoConfiguration

  • 컴포넌트 스캔으로 등록한 후 다시 한 번 빈을 읽어와 등록한다.

  • 즉, 없어도 스프링 부트를 사용할 수 있다.

    • 단, 웹 애플리케이션 설정을 꺼줘야 가능

  • 결국 이것도 @Configuration을 가지고 있다.

    1. spring.factories 라는 메타 파일을 읽어들인다.

    2. 메타 파일의 키 값을 보고 설정을 읽는다.

    3. 조건에 따라 빈이 생성되거나 생성되지 않는다.

예제

설정 만들기

우선 별도의 프로젝트를 새로 판다.

  1. 의존성을 추가한다.

  2. @Configuration 파일을 작성한다.

  3. src/main/resource/META-INF에 spring.factories를 생성한다.

  4. 안에 자동 설정 파일을 추가한다.

  5. mvm install을 실행한다.

설정 적용하기

기존 프로젝트로 돌아와 의존성을 적용하면 라이브러리가 나타난다.

Holoman을 어디서도 정의한 적이 없지만 사용할 수 있게 되었다.

설정 재정의 하기

하지만 빈을 다시 설정하려고 하면 기존 값 그대로 나온다

스프링 부트 2.1부터는 오버라이딩 하지 못하고 에러가 뜬다.

  1. 컴포넌트 스캔이 먼저 동작한다

    • @Bean이 먼저 동작한다.

  2. @AutoConfiguration으로 다시 등록한다.

    • @Bean 내용을 덮어 쓴다.

다시 설정 프로젝트 쪽으로 돌아가서 @ConditionalOnMissingBean을 달아준다.

  • @ConditionalOnMissingBean

  • 해당 타입의 빈이 없을 때만 이 빈을 등록하라는 뜻이 된다.

  • 설정 프로젝트에서 값을 설정할 때 빈에서 직접 하는 대신 properties에서 가져다 쓸 수도 있다.

  • 본 프로젝트에서 properties에 값을 추가하면 그대로 반영된다.

Last updated

Was this helpful?