Giới thiệu @EnableAutoConfiguration trong Spring Boot

@EnableAutoConfiguration annotation trong Spring cho phép nó tự động đoán và cấu hình các bean mà bạn có thể ứng dụng có thể cần trong ApplicationContext. Do đó, nó tự động tạo và đăng ký các bean dựa trên cả các tệp jar được bao gồm trong classpath và các bean do chúng ta tự định nghĩa.

Ví dụ, khi chúng ta sử dụng spring-boot-starter-web trong classpath, Spring boot sẽ tự động cấu hình TomcatSpring MVC.

Kể từ Spring Boot 1.2.0 release, @SpringBootApplication annotation được giới thiệu là sự kết hợp của @Configuration, @EnableAutoConfiguration@ComponentScan. Do vậy bạn không cần phải sử dụng @EnableAutoConfiguration cách riêng lẽ. Tuy nhiên các bạn vẫn phải cần hiểu rõ bản chất của nó nhé.

@EnableAutoConfiguration annotation trong Spring cho phép nó tự động đoán và cấu hình các bean mà bạn có thể ứng dụng có thể cần.

Ví dụ nếu bạn có nhúng một tomcat-embedded.jar trong classpath thì bạn sẽ cần TomcatEmbeddedServletContainerFactory bean để cấu hình tomcat server. Spring sẽ dựa vào đó mà tự động cấu hình thay vì bạn phải tự cấu hình thủ công với XML. 

Kể từ Spring Boot 1.2.0 release, @SpringBootApplication annotation được giới thiệu là sự kết hợp của @Configuration, @EnableAutoConfiguration@ComponentScan. Do vậy bạn không cần phải sử dụng @EnableAutoConfiguration cách riêng lẽ. Tuy nhiên các bạn vẫn phải cần hiểu rõ bản chất của nó nhé. 

Package của lớp khai báo chú thích @EnableAutoConfiguration được coi là package mặc định. Do đó, chúng ta nên luôn áp dụng chú thích @EnableAutoConfiguration trong gói gốc để mọi gói con và lớp đều có thể được kiểm tra:
@Configuration
@EnableAutoConfiguration
public class EmployeeApplication {
    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(EmployeeApplication.class, args);
        // ...
    }
}

@EnableAutoConfiguration với parammter

Dưới đây là các tham số chúng ta có thể truyền vào trong annotation này:

  • exclude – Loại bỏ một danh sách các class mà chúng ta không muốn cấu hình tự động.
  • excludeNames – Loại trừ danh sách các tên class khỏi cấu hình tự động. Tham số này được thêm vào kể từ spring boot 1.3.0.

Ví dụ loại JdbcTemplateAutoConfiguration class khỏi cấu hình tự động.

@Configuration
@EnableAutoConfiguration(exclude={JdbcTemplateAutoConfiguration.class})
public class EmployeeApplication {
    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(EmployeeApplication.class, args);
        // ...
    }
}

Chúng tôi có thể sử dụng excludeName để xác định một danh sách đầy đủ các tên class mà chúng ta muốn loại trừ khỏi cấu hình tự động:

@Configuration
@EnableAutoConfiguration(excludeName = {"org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration"})
public class EmployeeApplication {
    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(EmployeeApplication.class, args);
        // ...
    }

Nguồn tham khảo

https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/EnableAutoConfiguration.html

https://www.baeldung.com/spring-componentscan-vs-enableautoconfiguration

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