본문 바로가기
카테고리 없음

[스터디] 스프링 부트 개념과 활용 - 2주차 ( ~ 2/26)

by shakevan 2022. 2. 25.

SpringBootApplication안에 있는 어노테이션들

@SpringBootConfiguration //@Configuration과 동일
@EnableAutoConfiguration 
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)

SpringBootApplication내부

 

ComponentScan 어노테이션

- @Component 어노테이션을 가진 클래스들을 빈으로 등록함

- @Configuration, @Repository, @Service, @Controller, @RestController도 등록

- ComponentScan의 basePackages자기자신의 위치로, 자기자신과 동일한 패키지 & 하위 패키지에 있는 애들을 스캔함

 

 

EnableAutoConfiguration 어노테이션

- spring-boot-autoconfigure -> META-INF -> spring.factories에 선언되어 있는 아래 키값 하위의 Value(Configuration)파일들은 등록 함

- 해당 어노테이션이 존재하기에 SpringBootApplication을 쉽게 띄울 수 있다!

org.springframework.boot.autoconfigure.EnableAutoConfiguration

spring-boot-autoconfigure 라이브러리 안

 

Condition 어노테이션

- 조건에 따라 빈을 사용할지 결정해주는 어노테이션

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#features.developing-auto-configuration.condition-annotations

 

Spring Boot Reference Documentation

This section goes into more detail about how you should use Spring Boot. It covers topics such as build systems, auto-configuration, and how to run your applications. We also cover some Spring Boot best practices. Although there is nothing particularly spe

docs.spring.io

 

 

SpringBootAutoConfiguration

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using.auto-configuration

 

Spring Boot Reference Documentation

This section goes into more detail about how you should use Spring Boot. It covers topics such as build systems, auto-configuration, and how to run your applications. We also cover some Spring Boot best practices. Although there is nothing particularly spe

docs.spring.io

 

SpringBoot의  Bean등록 순서

  1. CompoentScan
  2. AutoConfiguration
CompoentScan과 AutoConfiguration에서 동일한 Bean을 정의하면 AutoConfiguration에 선언된 Bean이 덮어쓸 수 있다!
SpringBoot 2.1 부터는 동일한 메서드 이름의 같은 Bean을 생성하려고하면 아래와 같은 에러 메세지가 발생
Description:

The bean 'van', defined in class path resource [kvp/van/VanConfiguration.class], could not be registered. A bean with that name has already been defined in kvp.van.springboot.SpringbootApplication and overriding is disabled.​

 

이유는 Bean Overriding기능의 default값이 false로 변경되었기 때문!

https://www.baeldung.com/spring-boot-bean-definition-override-exception#configuration-change-for-spring-boot 

 

 

ConfigurationProperties & EnableConfigurationProperties

- 가이드

   - https://www.baeldung.com/configuration-properties-in-spring-boot

Spring Boot 2.2 부터는 ConfigurationProperties만 있어도 알아서 등록해 줌
따라서 EnableConfigurationProperties를 선언해주지 않아도 됨

 

AutoConfiguration을 활용하지 않은채로 Conditional을 사용하게 되면 의도와 다르게 동작하는 경우가 발생함

예시1) VanConfiguration에 ConditionalMissingBean을 선언한 경우

VanConfiguration에 ConditionalMissingBean을 선언한 경우 어노테이션이 의도한대로 동작하지 않았다.

예시2) VanConfiguration2에 ConditionalMissingBean을 선언한 경우

VanConfiguration2에 ConditionalMissingBean을 선언한 경우 정상적으로 컴파일이 가능했다

반대의 상황도 생기는 것 봐서는 랜덤인 것 같은데.... AutoConfiguration없이 Conditional

 

댓글