在SpringBoot项目中通过main()方法中的SpringApplication.run()启动当前项目,在启动类上我们通常要加上注解@SpringBootApplication,目的就是告诉SpringBoot,这个启动类是整个程序的入口。
@SpringBootApplication
public class ApplicationMain {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
细心关注源码的同学们可以发现,@SpringBootApplication注解的底层源码中包含了 @SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan这三个注解 ,下面简述下这几个注解的作用。
- @SpringBootConfiguration
继承了Spring的@Configuration注解,作用是声明此注解类是配置类,并且会将当前类中声明的bean注入到Spring容器中,实例的名字就是方法名。
- @ComponentScan
Spring中有四大注解@Service,@Repository,@Component,@Controller用来声明这是一个对应类型的bean,@ComponentScan就是用来自动扫描这些加了注解的类,然后注入到spring容器中生成相应的bean。
如果一个类加了@Controller注解,打算声明当前类为一个控制方法类,但是如果没有加@ComponentScan注解,该类就不会被spring扫描到,更不会注入到spring容器中,所以@Controller注解将毫无意义。
注:所以SpringBoot的启动类最好是放在root package下,因为默认不指定basePackages。但是如果类中引用的bean实例有当前包外的,则需要配置一下包路径用来控制扫描范围。
- @EnableAutoConfiguration
通过spring的上下文,猜测并配置你所需要的bean类,通常会根据类路径和bean定义自动配置。