Spring Boot Annotations

Người dịch : Nguyễn Xuân Trường - Học viên lớp Java08
Email liên hệ: truongnx.work@gmail.com
Bài viết gốc: https://www.baeldung.com/spring-boot-annotations

Bài viết này nằm trong series Spring Annotations
Spring Core Annotations
Spring Web Annotations
SpringBoot Annotations (bài viết hiện tại)

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 bài viết này, chúng ta sẽ khám phá các annotations từ các thư viện 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 Spring Boot.

@SpringBootApplication
class VehicleFactoryApplication {

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

Annotation @SpringBootApplication đóng gói các annotations @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ó, annotation này cho phép tự động cấu hình. Điều đó có nghĩa là Spring Boot tự động tìm kiếm các bean cấu hình trên classpath của nó và tự động áp dụng chúng.
Chú ý, chúng ta phải sử dụng annotation này với @Configuration:

@Configuration
@EnableAutoConfiguration
class VehicleFactoryConfig {}

4. Điều kiện tự động cấu hình

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 annotations trong phần sau.
Chúng ta có thể đặt các annotations trong phần này trên các lớp @Configuration hoặc các phương thức @Bean.

4.1. @ConditionalOnClass@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 class trong đối số của annotation có hoặc vắng mặt:

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

4.2. @ConditionalOnBean@ConditionalOnMissingBean

Chúng ta có thể sử dụng các annotation 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 annotation 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 tôi có thể tạo Spring để sử dụng định nghĩa chỉ khi có một tài nguyên cụ thể:

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

4.5. @ConditionalOnWebApplication@ConditionalOnNotWebApplication

Với những annotation này, chúng tôi 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 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 class điều kiện tùy chỉnh. Spring sử dụng điều kiện tùy chỉnh này với annotation @Conditional:

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

5. Tổng kết

Trong bài viết này, chúng ta đã xem tổng quan về cách mà 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.