본문 바로가기

Spring/Spring Boot

(SpringBoot) SpringBoot 자동설정

@EnableAutoConfiguration

 

@SpringBootApplication
public class SpringbootgettingstartedApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootgettingstartedApplication.class, args);
    }
}

위에 코드만 작성하면 webApplication이 읽히고 tomcat이 구동이 된다.

 

이는 @SpringBootApplication의 @EnableAutoConfiguration 덕분이다.

 


SpringBoot는 Bean을 두 단계로 등록을 한다.

  • @ComponentScan에서 등록 (1)
  • @EnableAutoConfiguration에서 등록 (2)

아래와 같은 방식으로 코드를 작성하고 실행을 하면 오류가 발생한다. (@EnableAutoConfiguration 제거)

@Configuration
@ComponentScan
public class SpringbootgettingstartedApplication {

    public static void main(String[] args) {
        SpringApplication springApplication = new SpringApplication(SpringbootgettingstartedApplication.class);
        springApplication.run();
    }
}

Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.

@EnableAutoConfiguration가 ServletWebServerApplicationContext를 내부에서 설정을 해주는데 해당 어노테이션을 제거하면 ServletWebServerFactory에 대한 bean을 생성하지 못하므로 에러가 발생한다.

 

일단은 WebApplication이 아닌 타입으로 실행을 하면 해당 오류가 발생하지 않는다.

@Configuration
@ComponentScan
public class SpringbootgettingstartedApplication {

    public static void main(String[] args) {
        SpringApplication springApplication = new SpringApplication(SpringbootgettingstartedApplication.class);
        springApplication.setWebApplicationType(WebApplicationType.NONE);
        springApplication.run();
    }
}

@ComponentScan

@ComponentScan이 빈으로 주입하는 애노테이션

@ComponentScan

@Component

@Configuration @Repository @Service @Controller @RestController

 

TypeExcludeFilteter, AutoConfigurationExlcludeFilter

제외

 

AutoConfigurationExlcludeFilter - AutoConfiguration에서 제외한 설정은 읽어드리지 않는다.

TypeExcludeFilteter - SpringBoot 내부에서 필요 없는 빈을 걸러내는 작업

 

https://jwdeveloper.tistory.com/76?category=823920

 

(SPRING) IoC 컨테이너 - @Component와 컴포넌트 스캔

@SpringBootApplication 내부 @ComponentScan 내부 basePackages의 값이 문자열이기 때문에 type safe 하지 않다. type safe 한 방법으로 설정 가능한 basePackagesClassses 스캔의 범위 지정 스캔의 시작 지..

jwdeveloper.tistory.com

간단하게 말하자면 @ComponentScan이 붙어있는 하위 패키지에 있는 자바 클래스들 중 위에 언급하였던 애노테이션이 있으면

해당 클래스를 Bean으로 등록해준다. (경로가 다른 패키지는 Bean으로 등록 불가!)

 


@EnableAutoConfiguration

@EnableAutoConfiguration은 Spring의 META 파일을 읽는다.

spring-boot-autoconfigure > META-INF > spring.factories

spring.factories 내부에는 EnableAutoConfuration의 KEY 값으로 여러 configuration 파일들이 저장되어있다.  (이것이 바로 컨벤션)

- 기본 설정

 

해당 configuration

파일 내부에는 

 

 

모두

@Configuration 

애노테이션이

붙어있다.

 

하지만 실제로 이 모든 설정 파일이 전부

설정되는 것은 아니다.

 

 

 

 

해당 Configuration의 내부를 살펴보면 조건에 따라 사용한다는 @Conditional... 애노테이션이 붙어있다.

 


코드 참조 

https://github.com/mike6321/Spring/tree/master/SpringBoot/springbootgettingstarted

 

mike6321/Spring

Contribute to mike6321/Spring development by creating an account on GitHub.

github.com