SpringBootApplication注解
当我们启动一个SpringBoot应用而不使用@SpringBootApplication注解时,会报错
Spring Boot 的Application和Controller看起来没有直接的关联关系,其实是通过各种注解把各个组件有机的组合起来,@SpringBootApplication注解是多个注解的结合体
@SpringBootApplication
标识着一个配置类(@SpringBootConfiguration
),声明了一个或者多个@Bean
,并且会触发自动配置
(@EnableAutoConfiguration
)和组件扫描
(@ComponentScan
)
@SpringBootConfiguration注解
应用程序应该只使用一次@SpringBootConfiguration注解,大多数情况下使用继承它的@SpringBootApplication注解就可以了
@Configuration注解
这是Spring Context框架提供的注解
表示一个类声明一个或多个@Bean方法,并且可以由Spring容器处理,以便在运行时为这些bean生成bean定义和服务请求,例如:
@Configuration
public class AppConfig {
@Bean
public MyBean myBean() {
// instantiate, configure and return bean ...
}
}
使用时声明一个AnnotationConfigApplicationContext:
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.registerBean(AppConfig.class);
ctx.refresh();
MyBean myBean = ctx.getBean(MyBean.class);
System.out.println(myBean.toString());
具体代码如下,@Configuraton的详细使用参考Spring Context的API文档,包名org.springframework.context.annotation
EnableAutoConfiguration注解
doc文档翻译
启用Spring应用程序上下文的自动配置,尝试猜测和配置您可能需要的bean。自动配置类通常基于类路径和定义的bean来应用。例如,如果类路径上有tomcat-embedded.jar,则可能需要一个TomcatServletWebServerFactory(除非定义了自己的ServletWebServerFactory bean)。
当使用SpringBootApplication时,上下文的自动配置是自动启用的,因此添加这个注释没有额外的效果。
自动配置试图尽可能地智能化,当您定义更多自己的配置时,它就会后退。您总是可以手动排除()您永远不想应用的任何配置(如果您没有访问这些配置的权限,则使用exclude())。您还可以通过spring.autoconfigure排除它们。排除属性。在注册了用户定义bean之后,总是会应用自动配置。
使用@EnableAutoConfiguration注释的类包(通常通过@SpringBootApplication)具有特定的意义,通常用作“缺省值”。例如,它将用于扫描@Entity类。通常建议将@EnableAutoConfiguration(如果不使用@SpringBootApplication)放在根包中,以便可以搜索所有子包和类。
自动配置类是常规的Spring配置bean。它们是使用SpringFactoriesLoader机制
定位的(针对该类进行监控)。通常,自动配置bean是@Conditional
(核心注解
) bean(通常使用@ConditionalOnClass和@ConditionalOnMissingBean注释)。