본문 바로가기
Dev/Spring Boot

[스프링 부트 개념과 활용] 자동 설정 만들기 2부

by dev_jsk 2020. 8. 19.
728x90
반응형

@ConditionalOnMissingBean

덮어쓰기 방지하기

@ConditionalOnMissingBean 사용

@Bean과 같이 사용 시 같은 타입의 Bean이 있다면 해당 Bean은 AutoConfiguration 시 등록하지 않는다.

 

예시

// Configuration Project
// HolomanConfiguration.java

@Configuration
public class HolomanConfiguration {
    @Bean
    @ConditionalOnMissingBean
    public Holoman holoman() {
        Holoman holoman = new Holoman();
        holoman.setHowLong(5);
        holoman.setName("Jinseo");
        return holoman;
    }
}

// Application Project
// Application.java

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
    
    @Bean
    public Holoman holoman() {
        Holoman holoman = new Holoman();
        holoman.setHowLong(100);
        holoman.setName("dev_jsk");
        return holoman;
    }
}

결과

 

@ConfigurationProperties

빈 재정의 수고 덜기

@ConfigurationProperties 사용

properties, yml 파일을 이용해 같은 Key값을 가진 정보를 Bean으로 등록한다.

 

예시

1. Configuration Project

application.propertiesholoman.name, holoman.how-long 추가

// application.properties

holoman.name=name
holoman.how-long=0

HolomanProperties.java 생성 및 @ConfigurationProperties("holoman") 추가

// pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
// HolomanProperties.java

@ConfigurationProperties("holoman")
public class HolomanProperties {
    private String name;
    private int howLong;
    
    getter/setter
}

HolomanConfiguration.java 수정 및 @EnableConfigurationProperties(HolomanProperties.class) 추가

// HolomanConfiguration.java

@Configuration
@EnableConfigurationProperties(HolomanProperties.class)
public class HolomanConfiguration {
    @Bean
    @ConditionalOnMissingBean
    public Holoman holoman(HolomanProperties properties) {
        Holoman holoman = new Holoman();
        holoman.setHowLong(properties.getHowLong());
        holoman.setName(properties.getName());
        return holoman;
    }
}

 

2. Application Project

application.propertiesholoman.name, holoman.how-long 추가

// application.properties

holoman.name=Kim Jinseo
holoman.how-long=28

결과

728x90
반응형

댓글