spring boot @SpringBootApplication,@EnableAutoConfiguration ใช้ทำอะไร

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(LoginApplication.class, args);
    }
}

The Spring Boot documentation อธิบาย @SpringBootApplication ไว้ว่า

The @SpringBootApplication annotation is equivalent to using @Configuration, @EnableAutoConfiguration and @ComponentScan with their default attributes: [...]

Many Spring Boot developers always have their main class annotated with @Configuration, @EnableAutoConfiguration and @ComponentScan. Since these annotations are so frequently used together (especially if you follow the best practices above), Spring Boot provides a convenient @SpringBootApplication alternative.

“เนื่องจากโปรแกรมเมอร์จำนวนมาก ใช้ annotated 3 อันนี้ร่วมกันบ่อยครั้ง @Configuration,@EnableAutoConfiguration และ @ComponentScan จึงยุบรวมอยู่ใน @SpringBootApplication ไปเลย”

ทีนี้เรามาดูกันว่า Annonation 3 ตัวนี้ทำหน้าที่อะไร

  1. @Configuration tags the class as a source of bean definitions for the application context. (Class ที่มี source ของ Bean ด้วย method ที่มี @Bean)
  2. @EnableAutoConfiguration It tells Spring to setup some basic infrastructure judging by what you have in the classpath. It’s done by invoking a so called import class that’s derived from the value of the @Import annotation that @EnableAutoConfiguration includes. Only one class should be annotated with @EnableAutoConfiguration (โหลดใช้งาน Required Bean ที่จำเป็นให้เราอัตโนมัติ เช่นถ้าใช้ JPA มันก็จะมองหา @Entity ให้อัตโนมัติ)
  3. @ComponentScan tells Spring to look for other components, configurations, and services in the the root package, allowing it to find the controllers. (บอกให้ Spring รู้จัก Annotated ภายใต้ Package ที่ระบุ ถ้าไม่ระบุก็จะเป็น ภายใต้ Package ของ Class ที่ใส่ @ComponentScan)

ถ้าหากต้องการ Custom เราสามารถใส่ Annotated เพิ่มเติมได้ เช่น หากเราไม่ต้องการโหลด Config บางตัวอัตโนมัติ

@SpringBootApplication
@EnableAutoConfiguration(exclude = LiquibaseAutoConfiguration.class)
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(LoginApplication.class, args);
    }

}

แหล่งอ้างอิง

https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-using-springbootapplication-annotation.html

https://stackoverflow.com/questions/33619532/configuration-using-annotation-springbootapplication

https://stackoverflow.com/questions/39247487/why-spring-boot-application-class-needs-to-have-configuration-annotation

Related posts:

This entry was posted in spring boot. Bookmark the permalink.