SpringBoot启动类和核心注解

 

标注@SpringBootApplication注解的类,就是Spring Boot应用程序的启动类。这个启动类中包含main方 法。

Spring BootiS过SpringApplication这个类的run方法来加载这个类,运行Spring Boot应用。

run方法做了两件事:

  1. 创建SpringApplication对象;在对象初始化时保存事件监听器,容器初始化类以及判断是否为web应 用,保存包含main方法的主配置类。
  2. 调用run方法;准备spring的上下文,完成容器的初始化,创建,加载等。会在不同的时机触发监听器 的不同事件。

 

 

        

@SpringBootApplication 注解就是Spring Boot的核心注解。

几乎所有的Spring Boot应用,都是用@SpringBootApplication这个注解标注的。

通过阅读@SpringBootApplication的源码,发现其由3个注解构成:

  1. @SpringBootConfiguration
  2. @EnableAutoConfiguration
  3. @ComponentScan

如果我们将@SpringBootApplication注解替换为上面3个注解,效果一样。

@ComponentScan

@ComponentScan这个注解在Spring中很重要,它的功能其实就是自动扫描并加载符合条件的组件(比如 @Component @[email protected]@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容器中,并且实例名就是方法名。