可以用于从Java主方法引导并启动Spring应用程序的类。默认情况下,类将执行以下步骤启动应用程序:
创建适当的ApplicationContext实例(取决于类路径)
注册一个CommandLinePropertySource,以Spring属性的形式暴露命令行参数
刷新应用程序上下文,加载所有的单例bean
触发所有的CommandLineRunner bean
在大多数情况下,静态方法run(Class<?>[] primarySources, String[] args)可以直接从主方法调用,从而引导应用程序:
1 2 3 4 5 6 7 8 9 10 @Configuration @EnableAutoConfiguration public class MyApplication { public static void main (String[] args) throws Exception { SpringApplication.run(MyApplication.class, args); } }
对于更高级的配置,可以在运行之前创建和定制SpringApplication实例:
1 2 3 4 5 public static void main (String[] args) throws Exception { SpringApplication application = new SpringApplication (MyApplication.class); application.run(args) }
springapplication可以从各种不同的来源读取bean。通常建议使用一个@Configuration类来引导应用程序,但是,您也可以从以下设置源:
由AnnotatedBeanDefinitionReader加载的完全限定类名
XmlBeanDefinitionReader装载的XML资源的位置,或者GroovyBeanDefinitionReader装载的groovy脚本
ClassPathBeanDefinitionScanner要扫描的软件包的名称
配置属性也绑定到SpringApplication。这使得可以动态地设置SpringApplication属性,比如额外的源(“spring.main”。来源“-一个CSV列表)标志以表示一个web环境(“spring.main.web-application-type=none”)或标志以关闭横幅(“spring.main.bannermode =off”)。
启动时调用main方法,主要执行***SpringApplication.run()***方法
1 2 3 public static void main (String[] args) { SpringApplication.run(RabbitApplication.class, args); }
SpringApplication的run方法实现
1 2 3 4 5 6 7 8 9 10 11 public static ConfigurableApplicationContext run (Class<?> primarySource, String... args) { return run(new Class <?>[] { primarySource }, args); }
其中primarySource即为com.lemon.rabbit.RabbitApplication
SpringApplication中定义了一些静态的成员属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 public static final String DEFAULT_CONTEXT_CLASS = "org.springframework.context." + "annotation.AnnotationConfigApplicationContext" ; public static final String DEFAULT_WEB_CONTEXT_CLASS = "org.springframework.boot." + "web.servlet.context.AnnotationConfigServletWebServerApplicationContext" ; private static final String[] WEB_ENVIRONMENT_CLASSES = { "javax.servlet.Servlet" , "org.springframework.web.context.ConfigurableWebApplicationContext" }; public static final String DEFAULT_REACTIVE_WEB_CONTEXT_CLASS = "org.springframework." + "boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext" ; private static final String REACTIVE_WEB_ENVIRONMENT_CLASS = "org.springframework." + "web.reactive.DispatcherHandler" ; private static final String MVC_WEB_ENVIRONMENT_CLASS = "org.springframework." + "web.servlet.DispatcherServlet" ; public static final String BANNER_LOCATION_PROPERTY_VALUE = SpringApplicationBannerPrinter.DEFAULT_BANNER_LOCATION;public static final String BANNER_LOCATION_PROPERTY = SpringApplicationBannerPrinter.BANNER_LOCATION_PROPERTY;private static final String SYSTEM_PROPERTY_JAVA_AWT_HEADLESS = "java.awt.headless" ;