Written by : Nguyen Quoc Thai
Gmail: thaithedoublecheese1@gmail.com

1. Tổng quát

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 nhanh này, chúng ta sẽ khám phá các chú thích từ các gói org.springframework.boot.autoconfigureorg.springframework.boot.autoconfigure.condition packages.

2. @SpringBootApplication

Chúng ta sử dụng chú thích này để đánh dấu lớp chính của ứng dụng Spring Boot:

@SpringBootApplication
class VehicleFactoryApplication {

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

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

3. @EnableAutoConfiguration

@EnableAutoConfiguration , như tên gọi của nó, cho phép tự động cấu hình. Điều đó có nghĩa là Spring Boot tìm kiếm các bean có cấu hình tự động trên classpath của nó 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. Điều kiện cấu hình tự động

Thông thường, khi chúng ta viết các cấu hình tự động tùy chỉnh 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 chú thích trong phần này.

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

Trong các phần tiếp theo, chúng tôi sẽ chỉ giới thiệu khái niệm cơ bản đằng sau mỗi điều kiện. Để biết thêm thông tin, vui lòng truy cập bài viết này .

4.1. @ConditionalOnClass và @ConditionalOnMissingClass

Sử dụng các điều kiện này, Spring sẽ chỉ sử dụng bean cấu hình tự động được đánh dấu nếu lớp trong đối số của chú thích có / vắng mặt :

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

4.2. @ConditionalOnBean và @ConditionalOnMissingBean

Chúng ta có thể sử dụng các chú thích này khi chúng ta muốn xác định các điều kiện dựa trên sự hiện diện hoặc vắng mặt của một bean cụ thể :

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

4.3. @ConditionalOnProperty

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

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

4.4. @ConditionalOnResource

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

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

4.5. @ConditionalOnWebApplication and @ConditionalOnNotWebApplication

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


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

4.6. @ConditionalExpression

Chúng ta có thể sử dụng chú thích 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 tôi yêu cầu Spring sử dụng điều kiện tùy chỉnh 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 được tổng quan về cách chúng ta có 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.