Tổng quan các annotation cơ bản trong Spring Boot

Spring Boot làm cho việc cấu hình Spring dễ dàng hơn với tính năng cấu hình tự động của nó. Các tính năng này phần lớn được sử dụng thông qua các annotation mà Spring Boot cung cấp.

Trong bài viết chúng ta sẽ cùng nhau tìm hiểu các annotation của Spring Boot được định nghĩa trong org.springframework.boot.autoconfigure và org.springframework.boot.autoconfigure.condition package.

@SpringBootApplication

Chúng ta sử dụng annotation này cho Main class của một ứng dụng Spring Boot. 

@SpringBootApplication
class MainApplication {

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

@SpringBootApplication đóng gói 3 annotation @Configuration, @EnableAutoConfiguration @ComponentScan bên trong. Vì vậy, đừng có sử dụng @SpringBootApplication với một trong 3 annotation trên nhé, ngố lắm.

@EnableAutoConfiguration

@EnableAutoConfiguration, như cái tên của nó, cho phép Spring Boot tự động tìm kiếm
auto-configuration bean () trong classpath và tự động áp dụng chúng.
 
 
auto-configuration bean – Hiểu đơn giảnm bean là các object được Spring Boot quản lý và sử dụng xuyên suốt trong ứng dụng, auto-configuration  là các cấu hình trong Spring Boot, chúng sẽ được khởi tạo đầu tiên khi ứng dụng khởi chạy, để đảm bảo nó sẵn sàng được sử dụng bởi các class khác.
 
Lưu ý rằng chúng ta phải sử dụng nó với @Configuration.
@Configuration
@EnableAutoConfiguration
class ExampleConfig {}

Auto-configuration Condition

Thông thường khi chúng ta viết các cấu hình riêng của mình sử dụng @Configuration trên class hoặc @Bean trên method và chúng ta muốn sử dụng chúng dựa trên các điều kiện nhất định. Thì ở trong phần này chúng ta sẽ cùng nhau tìm hiểu các annotation cho phép đặt các điều kiện trên các cấu hình của mình.

@ConditionalOnClass & @ConditionalOnMissingClass

Sử dụng các annotation này, Spring boot sẽ chỉ sử dụng đánh đánh đó là các auto-configuration bean nếu class được liệt kê trong annotation có mặt 

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

@ConditionalOnBean & @ConditionalOnMissingBean

Chúng ta có thể sử dụng các 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() {
    // ...
}

@ConditionalOnResource

Chúng ta khởi tạo một bean nếu resource chỉ định được tìm thấy

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

@ConditionalOnWebApplication & @ConditionalOnNotWebApplication

Với những annotation 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() {
    // ...
}

@ConditionalExpression

Sử dụng annotation này cho các điều kiện phức tạp hơn. Spring boot sẽ sử dụng các auto-configuation bean này dựa trên các biểu thức trả về giá trị Boolean.

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

 @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 để thiết lập các điều kiện cụ thể và chỉ định nó trong @Conditional.

 

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

Tóm lược

Như vậy chúng ta đã tìm hiểu sơ qua các khái niệm cơ bản của những annotation trong Spring Boot. Trong đấy, @SpringBootApplication thường mọi người không chú ý đến nhiều do vậy dẫn đến việc hiểu không kỹ và sử dụng sai hoàn toàn. Có những người đã dùng @SpringBootApplication rồi còn quất thêm @EnableAutoConfiguration hoặc @ComponentScan, thật không thể tin nỗi.

Nguồn tham khảo

https://www.baeldung.com/spring-boot-annotations#condition-property

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x