Bean 등록 단계
- Component scan을 통해서 모은 component들의 정보에 의해 빈 등록
- Spring Boot가 spring.factories 파일에 사전에 정의한 AutoConfiguration 내용에 의해 bean 생성이 진행
예상되는 문제점
- @Component를 통해 등록한 빈과, @Configuration에 의해 등록된 빈이 서로 충돌하면?
- 개발자가 등록한 빈이 @Configuration에 의해 오버라이딩된다면?
- 우리에게 필요없는 빈이 @Configuration에 의해 자동으로 등록된다면?
해결법 ~ 조건적인 빈 등록
- AutoConfigure 설정 자바 파일에서, @Bean을 반환하는 메소드에 @Conditional 관련 어노테이션을 이용해서 특정 조건 하에서만 빈을 등록할 수 있다.
- @ConditionalOnMissingBean : 특정 빈이 등록되지 않았을 때만 빈을 등록
- @ConditionalOnBean : 특정 빈이 등록되었을 때만 빈을 등록 (작업을 위해 필수적인 빈이 등록되었는지 확인)
- @ConditionalOnClass : 특정 클래스가 등록되었을 때만 빈을 등록 (작업을 위해 필수적인 의존성이 있는지 확인)
또 다른 문제점
- 위의 해결법을 통해 빈 등록을 조절할 수 있다.
- 자동설정 파일에 의해 등록되는 빈의 내용을 수정하려면 어떻게 해야 할까?
- 일일이 메인 어플리케이션 클래스(ApplicationContext역할)에서 @Bean을 통해 재정의해야 할까?
해결법 ~ 의존성을 사용하는 쪽에서 별도의 properties 정의
<의존성을 추가하는 쪽>
- resources/application.properties 생성
- properties 파일에서 해당 인스턴스의 값을 설정
ex) holoman.name = kkambi
holoman.age = 55
<의존성이 되는 쪽>
- properties에 해당하는 자바 파일 생성
- properties class는 @ConfigurationProperties("Bean이름")이 선언된다.
- 해당 빈의 멤버변수 / getter / setter 를 구현한다.
- Configuration에 해당하는 자바 파일 생성
- Configuration class는 @EnalbeConfigurationProperties( HolomanProperties.class ) 이 선언된다.
- Configuration class 안의 @Bean 메소드에서 5번에서 주입받은 HolomanProperties를 인자로 받고
@Bean 메소드 내의 setter를 사용하여 프로퍼티의 멤버변수를 할당한다.
결론
의존성을 사용하는 프로젝트에서, 자신들이 정의한 properties만을 이용해, AutoConfiguration파일의 빈을 등록한다.
즉, 빈을 재정의할 필요 없이 properties를 통해 내용만 변경한다.
'학습 > Spring' 카테고리의 다른 글
[spring] 독립적으로 실행 가능한 JAR (Executable Jar) (0) | 2020.04.08 |
---|---|
[spring] 스프링부트의 내장 WAS 이해와 응용 (0) | 2020.04.08 |
[spring] 스프링부트의 Bean 등록 2단계 (0) | 2020.03.28 |
[spring] 스프링부트 프로젝트 초기 세팅 시 빌드 툴의 이해 (maven, gradle) (0) | 2020.03.25 |
[spring] 스프링부트 프로젝트 초기 생성 및 구조 (gradle) (0) | 2020.03.23 |
댓글