Spring Boot Annotations
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.autoconfigure và org.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 và @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.
Leave a Reply