-
스프링 부트 5일차 - 스프링 부트 AutoConfigurePortfolio/Spring Boot 2019. 4. 5. 21:02728x90
Autoconfiguration으로 만든 starter를 의존성에 추가해준 경우
해당 starter에서 등록한 Bean이 Autowired를 해줄경우 매핑이 될 것이다.
그런데 만약 해당 Bean을 내 프로젝트에서 다시 Bean으로 강제로 지정해줄 경우 어떤 Bean으로 오버라이드 될까?
이것에 대한 답은 스프링부트 2.1버전 이전과 후로 나뉘는데 우선 이전 버전의 경우
내 프로젝트에서 등록한 Bean 대신 starter에서 Autoconfiguration으로 등록한 Bean이 오버라이딩 되어 생성된다.
반면 스프링부트 2.1버전 이후의 경우 기본적으로 실행 오류가 뜬다. 다음과 같은 메시지를 띄우면서.
***************************
APPLICATION FAILED TO START
***************************
Description:
The bean 'holoman', defined in class path resource [me/whiteship/HolomanConfiguration.class], could not be registered. A bean with that name has already been defined in me.whiteship.Application and overriding is disabled.
Action:
Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true
Process finished with exit code 1
오버라이딩을 하고 싶다면 allow-bean-definition-overriding 옵션을 true로 줘야한다.
여기서 주의할 점은 Bean으로 결국 등록되는 것은 starter의 Bean이라는 것이다.
즉 스프링 부트가 프로젝트를 스캔할 때 먼저 프로젝트 내에 있는 Bean을 등록한 후
의존성들에 있는 Bean을 나중에 등록하기 때문에 의존성에 있는 Bean으로 오버라이딩 된다는 것을 확인할 수 있다.
* 만약 해당 Bean이 이미 존재한다면 오버라이딩 하지 않도록 하기 위해서는 starter(의존성) 쪽에서 @Bean 어노테이션과 함께 @ConditionalOnMissingBean 어노테이션을 주면 Bean이 없을때만 Bean을 생성하여 등록한다.
참고 : https://engkimbs.tistory.com/754
근데 Bean은 그대로 Autoconfiguration으로 만들어주는걸 사용하고 안에 있는 값만 바꾸고 싶은데.. 꼭 내가 이렇게 Bean을 만들어줘야 하는건가? 어떻게 해야하지?
-> resources에 application.properties에 해당 bean의 properties를 정의해주면됨, 그리고 HolomanProperties 클래스를 생성 후 @ConfigurationProperties("holoman") 어노테이션을 주면됨.
holoman.name = 이준형
holeman.how-long=100
'Portfolio > Spring Boot' 카테고리의 다른 글
스프링 부트 11일차 - index 페이지, 파비콘, 템플릿 엔진, HtmlUnit, ExceptionHandler (0) 2019.04.16 스프링 부트 10일차 - ViewResolve, Static Resource, WebJar (0) 2019.04.15 스프링 부트 9일차 - Spring-Boot-Devtools, 스프링 웹 MVC (0) 2019.04.09 스프링 부트 8일차 - 스프링 부트 테스트 (0) 2019.04.08 스프링 부트 7일차 - 스프링 부트 Jar, SpringApplication, 로거 (0) 2019.04.07 스프링 부트 6일차 - 스프링 부트 내장 웹 서버, SSL/HTTP2 적용 (0) 2019.04.06 스프링 부트 4일차 - 스프링 부트 프로젝트 구조와 의존성 그리고 자동설정 (0) 2019.04.04 스프링 부트 3일차 - 인프런 강좌로 다시 시작 (0) 2019.04.03 스프링 부트 2일차 - junit으로 단위 테스트, FetchType (4) 2019.04.01 스프링 부트 1일차 - 스프링 부트 시작 (0) 2019.03.31