Spring Boot启动类分析
package com.rui.Spring_Boot_215; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
关键类:@SpringBootApplication,SpringApplication
完全限定名:
org.springframework.boot.SpringApplication
org.springframework.boot.autoconfigure.SpringBootApplication
1 @SpringBootApplication
表明一个配置类中声明了一个或者多个带@Bean注解的方法,同时也触发了自动配置和组件扫描的功能。
该注解是三个注解的组合:@Configuration,@EnableAutoConfiguration 和 @ComponentScan。
@SpringBootConfiguration等价于@Configuration
属性:
exclude 排除掉指定的自动配置的类。数组形式。例如exclude={a.class,b.class}
excludeName 排除掉指定的自动配置的类的名字。数组形式。例如excludeName={"x.y.z","a.b.c"}
scanBasePackages 扫描带注解的组件的基础包
scanBasePackageName scanBasePackages()的类型安全替代方法,用于指定要扫描带注解组件的包。将扫描指定的每个类的包。
联系:Java注解
2 SpringApplication
SpringApplication.java 总共1330行
从Java的main方法中可以使用类 SpringApplication 来引导和启动一个Spring应用程序。默认地,该类通过以下的步骤来引导应用程序员:
1 创建一个合适的 ApplicationContext 实例(这个取决于classpath)
2 注册 CommandLinePropertySource以将命令行参数曝露为Spring的属性
3 重刷新应用上下文,加载所有的单例bean
4 触发任何 CommandLineRunner bean
调用 SpringApplication 的静态方法 run(Class, String[]) 可以从main方法中启动应用。
@Configuration @EnableAutoConfiguration public class MyApplication { // ... Bean definitions public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
更高级的配置是,在运行应用之前,创建 SpringApplication 实例并且配置该实例,如下所示:
public static void main(String[] args) { SpringApplication application = new SpringApplication(MyApplication.class); // ... customize application settings here application.run(args) }
SpringApplication 可以从各种不同的源中读取bean。一般推荐使用单例的 @Configuration 类来引导你的应用程序,
然而,你也可以使用以下方式设置源:
1 AnnotatedBeanDefinitionReader 加载全限定类名
2 XmlBeanDefinitionReader 加载XML文件资源,或者 GroovyBeanDefinitionReader 加载 groovy 脚本
3 ClassPathBeanDefinitionScanner 扫描包的名字
配置属性也是绑定到 SpringApplication 的。这使得动态设置 SpringApplication 的属性成为可能,像其他的源("spring.main.sources" - 一个CSV列表),表示这是一个web环境的标志("spring.main.web-application-type=none")或者关闭banner的标志("spring.main.banner-mode=off")。
参考资料