본문 바로가기

Web/spring

[Annotation] Spring Boot Annotations

728x90

https://www.baeldung.com/spring-boot-annotations

 


 

org.springframework.boot.autoconfigure

org.springframework.boot.autoconfigure.condition 

 

 

 

 

 

@SpringBootApplication

Spring Boot application base class

@Configuration, @EnableAutoConfiguration, @ComponentScan 애노테이션을 기본 속성으로 캡슐화함

 

@SpringBootApplication
class VehicleFactoryApplication {

    public static void main(String[] args) {
        SpringApplication.run(VehicleFactoryApplication.class, args);
    }
}

 

 

@EnableAutoConfiguration

자동구성활성화, Spring Boot가 클래스 Path에서 자동 구성 bean을 찾고 자동 적용해줌

 

** @Configuration 와 같이 사용

@Configuration
@EnableAutoConfiguration
class VehicleFactoryConfig {}

 


Auto-Configuration Conditions

 

@ConditionalOnClass and @ConditionalOnMissingClass

Spring은 annotation's argument is present/absent (존재/부재) 여부에 따라서 자동 구성 빈 사용

@Configuration
@ConditionalOnClass(DataSource.class)
class MySQLAutoconfiguration {
    //...
}

 

 

@ConditionalOnBean and @ConditionalOnMissingBean

특정 bean의 유무에 따라 조건을 정의

@Bean
@ConditionalOnBean(name = "dataSource")
LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    // ...
}

 

@ConditionalOnProperty

속성 값에 대한 조건 생성

@Bean
@ConditionalOnProperty(
    name = "usemysql", 
    havingValue = "local"
)
DataSource dataSource() {
    // ...
}

 

 

@ConditionalOnResource

특정resource 존재할 때만 정의사용

@ConditionalOnResource(resources = "classpath:mysql.properties")
Properties additionalProperties() {
    // ...
}

 

 

@ConditionalOnWebApplication and @ConditionalOnNotWebApplication

현재 애플리케이션이 Web Application 인지 체크해서 조건 생성

@ConditionalOnWebApplication
HealthCheckController healthCheckController() {
    // ...
}

 

 

@ConditionalExpression

(조건식)

복잡한 조건에 따라 정의 사용

Spring은 SpEL 표현식이 true 일 때 정의를 사용하겠다는 의미

@Bean
@ConditionalOnExpression("${usemysql} && ${mysqlserver == 'local'}")
DataSource dataSource() {
    // ...
}

 

 

 

 

@Conditional

더 복잡한 조건에서 맞춤 조건을 평가하는 클래스로 체크할 때

@Conditional(HibernateCondition.class)
Properties additionalProperties() {
    //...
}

 

728x90