@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 Tomcat và Spring 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 và @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 và @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é.
@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://www.baeldung.com/spring-componentscan-vs-enableautoconfiguration