标注@SpringBootApplication注解的类,就是Spring Boot应用程序的启动类。这个启动类中包含main方 法。
Spring BootiS过SpringApplication这个类的run方法来加载这个类,运行Spring Boot应用。
run方法做了两件事:
@SpringBootApplication 注解就是Spring Boot的核心注解。
几乎所有的Spring Boot应用,都是用@SpringBootApplication这个注解标注的。
通过阅读@SpringBootApplication的源码,发现其由3个注解构成:
如果我们将@SpringBootApplication注解替换为上面3个注解,效果一样。
@ComponentScan
@ComponentScan这个注解在Spring中很重要,它的功能其实就是自动扫描并加载符合条件的组件(比如 @Component @Controller@RestController@Service和@Repository)或者bean定义,最终将 这些bean定义加载到Spring loC容器中。
我们可以通过basePackages等属性来细粒度的定制@ComponentScan自动扫描的范围,如果不指定(通 常情况下,我们都不会指定basePackages),则默认Spring框架实现会从声明@componentscan所在类的 package进行扫描。这也就是为什么我们一般都是将启动类放到应用的“根包”中,然后在其下再放置各个 模块/功能的包。
@componentscan告诉Spring哪个packages的用注解标识的类会被spring自动扫描并且装入bean容器。
例如,如果你有个类用@Controlle性解标识了,那么,如果不加上匹o叩onentscan自动扫描该 controller,那么该Controller就不会被Spring扫描到,也就不会装入Spring容器(loC)中,因此你配置的 这个Controller也没有意义。
下面列出@ComponentScan注解的参数,说明其作用:
basePackageClasses:对basepackages()指定扫描注释组件包类型安全的替代。
excludeFilters:指定不适合组件扫描的类型。
includeFilters:指定哪些类型有资格用于组件扫描。
lazylnit:指定是否应注册扫描的beans为lazy初始化。
nameGenerator:用于在Spring容器中的检测到的组件命名。
resourcepattern:控制可用于组件检测的类文件。
scopedProxy:指出代理是否应该对检测元件产生,在使用过程中会在代理风格时尚的范围是必要的。 scopeResolver:用于解决检测到的组件的范围。
useDefaultFilters:指示是否自动检测类的注释
@EnableAutoConfiguration
@EnableAutoConfiguration简单概括一下就是,借助@lmport的支持,收集和注册特定场景相关的bean 定义。
而@EnableAutoConfiguration也是借助@lmport的帮助,将所有符合自动配置条件的bean定义加载到loC 容器中来。
@SpringBootConfiguration
@SpringBootConfiguration继承自©Configuration,二者功能也一致,标注当前类是配置类,并会将当前 类内声明的一个或多个以@Bean注解标记的方法的实例纳入到Spring容器中,并且实例名就是方法名。