post-image

Spring Boot Annotations

Spring Boot Starters & Common Configurations

1. Tổng quan

Spring Boot giúp cấu hình Spring dễ dàng hơn với tính năng tự động cấu hình.

Trong hướng dẫn này, chúng ta sẽ cùng khám phá các annotation từ các gói org.springframework.boot.autoconfigureorg.springframework.boot.autoconfigure.condition.

2. @SpringBootApplication

Chúng ta sử dụng annotation này để đánh dấu class chính của ứng dụng SpringBoot:

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

@SpringBootApplication đóng gói các annotation @Configuration@EnableAutoConfiguration @ComponentScan với các thuộc tính mặc định của chúng.

3. @EnableAutoConfiguration

@EnableAutoConfiguration là một annotation cho phép chúng ta cấu hình tự động. Điều đó có nghĩa là SpringBoot sẽ tìm kiếm các bean tự động cấu hình trên classpath và tự động áp dụng chúng.

Lưu ý rằng chúng tôi phải sử dụng chú thích này với @Configuration:

@Configuration
@EnableAutoConfiguration
class VehicleFactoryConfig {}

4. Auto-Configuration Conditions

Thông thường, khi chúng ta viết các custom auto-configurations của mình, chúng ta muốn Spring sử dụng chúng có điều kiện. Chúng ta có thể đạt được điều này với các annotation trong phần này.

Chúng ta có thể đặt các annotation trong phần này trên các lớp @Configuration hoặc phương thức @Bean.

4.1 @ConditionalOnClass and @ConditionalOnMissingClass

Sử dụng các điều kiện này, Spring sẽ chỉ sử dụng bean auto-configuration được đánh dấu nếu lớp trong tham số của annotation là present/absent:

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

4.2 @ConditionalOnBean and @ConditionalOnMissingBean

Chúng ta có thể sử dụng những annotation này khi chúng ta muốn xác định điều kiện dựa trên presence or absence của một bean cụ thể:

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

4.3 @ConditionalOnProperty

Với annotation này, chúng ta có thể đưa ra các điều kiện về giá trị của thuộc tính:

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

4.4 @ConditionalOnResource

Chúng ta có thể làm cho Spring sử dụng một định nghĩa chỉ khi một tài nguyên cụ thể:

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

4.5 @ConditionalOnWebApplication and @ConditionalOnNotWebApplication

Với những annotation này, chúng ta có thể tạo ra các điều kiện dựa trên việc ứng dụng hiện tại có phải ứng dụng web hay không:

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

4.6 @ConditionalExpression

Chúng ta có thể sử dụng các annotation này trong các tình huống phức tạp hơn. Spring sẽ sử dụng định nghĩa được đánh dấu khi biểu thức SpEL được đánh giá là true:

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

4.7 @Conditional

Đối với các điều kiện phức tạp hơn, chúng ta có thể tạo một lớp đánh giá điều kiện tùy chỉnh. Chúng ta yêu cầu Spring sử dụng điều kiện tùy chỉnh này với annotation này với @Conditional:

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

5. Kết luận

Trong bài viết này, chúng ta đã xem tổng quan về cách chúng tacó thể tinh chỉnh quá trình cấu hình tự động và cung cấp các điều kiện cho các bean cấu hình tự động tùy chỉnh.

Nguồn: https://www.baeldung.com/spring-boot-annotations

Leave a Reply

Your email address will not be published.