Spring boot所学注解@EnableAutoConfiguration和@SpringbootApplication(main函数)

@EnableAutoConfiguration和@SpringbootApplication的区别

SpringBoot采取了这些注解的优点,在@EnableAutoConfiguration注解中的这些注解被用来执行自动配置(auto-configuration)。让我们来近距离的看一下@EnableAutoConfiguration注解并看一看它背后的逻辑。   

@Target({ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Inherited

@AutoConfigurationPackage

@Import({EnableAutoConfigurationImportSelector.class})

public @interfaceEnableAutoConfiguration {

    String ENABLED_OVERRIDE_PROPERTY= "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {};

    String[] excludeName() default {};

}

我们知道,这个类会尝试去猜测和配置应用中需要的bean。auto-configuration类是基于classpath(pom.xml的配置)的配置和应用中定义的beans被使用,但是发挥这种魔力的是org.springframework.boot.autoconfigure.EnableAutoConfigurationImportSelector类,该类可以找到所有必须的配置类。

定位main应用类:建议将main应用类放在位于其他类上面的根包(rootpackage)中。通常使用@EnableAutoConfiguration 注解你的main类,并且暗地里为某些项定义了一个基础“search package”。例如,如果你正在编写一个JPA应用,在被 @EnableAutoConfiguration所注解的类的包中的所有@Entity注解的项都将会被检索到。

使用root包允许在不需要指定basePackage属性的情况下使用@ComponentScan注解。如果main类位于根包中,你也可以使用@SpringBootApplication 注解。

 你可以添加@SpringBootApplication或@ComponentScan注解而不需要任何参数。你的所有应用程序组件(@Component , @Service , @Repository , @Controller 等)将被自动注册为Spring Beans。

很多Spring Boot开发者总是使用@Configuration , @EnableAutoConfiguration 和 @ComponentScan 注解他们的main类。由于这些注解被如此频繁地一块使用, Spring Boot提供一个方便的@SpringBootApplication 选择。@SpringBootApplication 注解等价于以默认属性使用@Configuration , @EnableAutoConfiguration 和 @ComponentScan 。

原文:https://blog.csdn.net/u014590757/article/details/79544883 
 

猜你喜欢

转载自blog.csdn.net/qq_38085240/article/details/85695243