데브코스 W6D5

코끼릭·2022년 4월 24일
0

TIL

목록 보기
24/36

@SpringBootApplication

스프링 부트의 기본적인 설정을 선언해주는 어노테이션으로 해당 어노테이션은 다음과 같은 아노테이션을 포함하고 있다.

@Target(value = {ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
    @ComponentScan.Filter(type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class}),
    @ComponentScan.Filter(type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class})})
public @interface SpringBootApplication {
	...
}

@ComponentScan

@Service, @Repository, @Component, @Controller가 붙은 클래스를 자동으로 탐색해서 빈으로 등록해주는 아노테이션으로 filter를 통해 필요한 클래스에 대해서만 빈으로 등록할 수 있도록 지정되어 있는 상태이다.

@EnableAutoConfiguration

스프링 부트에 필요한 클래스들을 자동으로 빈으로 등록하는 옵션을 킨다는 의미의 아노테이션이다.

@SpringBootConfiguration

@Configuration과의 차별점은 자동으로 Configuration을 찾아줘서 단위 테스트와 통합 테스트에서 장점을 가지고 있다.

@EnableConfigurationProperties

해당 아노테이션을 사용한 어플리케이션 컨텍스트 설정 클래스에 @ConfiguratonProperties를 사용한 클래스 정보가 빈으로 등록 되기 때문에 프로퍼티 정보가 저장된 클래스를 빈으로 등록할 수 있게 된다.

@Configuration
@EnableConfigurationProperties(AppProperties.class)
public class Configuration {
	//Configuration 자체도 빈이기 때문에 다음과 같이
    //프로퍼티 객체를 주입받을 수 있다.
    @Autowired
    private AppProperties appProperties;
    
    //아노테이션 설정만으로 빈으로 등록됐기 때문에
    //오토와이어링 없이 바로 사용도 가능하다.
    @Bean
    public DataSource dataSource(AppProperties appProperties) {
    	        return DataSourceBuilder.create()
                  .driverClassName(appProperties.getDb_driver_class())
                  .url(appProperties.getDb_url())
                  .username(appProperties.getDb_user())
                  .password(appProperties.getDb_pwd())
                  .type(MysqlDataSource.class)
                  .build();
    }
}

@ConfiguratonProperties

프로퍼티를 저장하는 POJO에 프로퍼티에 저장된 설정값을 자동으로 주입시켜주는 아노테이션으로 해당 프로퍼티 객체를 빈으로 등록하기 위해서는 @EnableConfigurationProperties에 해당 pojo를 등록한 @Configuration 클래스가 필요한데 pojo 클래스 자신이 @Cofiguration으로 등록해서 사용도 가능하다.

@Getter
@Setter//프로퍼티 값을 주입 받기 위한 필수작업
@ConfigurationProperties(prefix = "additional")
public class AppProperties {

    private String unit;//additional.unit 값 주입
    private int max;//additional.max 값 주입
}

//별도의 Configuration 클래스 없이 Configuration 
//클래스로 자신을 스스로 등록할 수 있다.
@Getter
@Setter
@Configuration
@EnableConfigurationProperties({AppProperties.class})
@PropertySource("application.properties")
@ConfigurationProperties(prefix="dev")
public class AppProperties {
    private String customer_blacklist_info;
    private String voucher_info;
    private String db_driver_class;
    private String db_url;
    private String db_user;
    private String db_pwd;
}

위의 예제 코드를 보면 해당 프로퍼티 설정 클래스의 각 속성에는 application.properties의 값이 주입이 되는데 이때 주입되는 값은 사용자가 명시한 prefix 접두사 + 속성이름에 해당하는 값이 된다.


EnableConfigurationProperties
ConfigurationProperties

profile
ㅇㅅㅇ

0개의 댓글