7777 * Classes that can be used to bootstrap and launch a Spring application from a Java main
7878 * method. By default class will perform the following steps to bootstrap your
7979 * application:
80- *
80+ *
8181 * <ul>
8282 * <li>Create an appropriate {@link ApplicationContext} instance (depending on your
8383 * classpath)</li>
84- *
84+ *
8585 * <li>Register a {@link CommandLinePropertySource} to expose command line arguments as
8686 * Spring properties</li>
87- *
87+ *
8888 * <li>Refresh the application context, loading all singleton beans</li>
89- *
89+ *
9090 * <li>Trigger any {@link CommandLineRunner} beans</li>
9191 * </ul>
92- *
92+ *
9393 * In most circumstances the static {@link #run(Object, String[])} method can be called
9494 * directly from your {@literal main} method to bootstrap your application:
95- *
95+ *
9696 * <pre class="code">
9797 * @Configuration
9898 * @EnableAutoConfiguration
9999 * public class MyApplication {
100- *
100+ *
101101 * // ... Bean definitions
102- *
102+ *
103103 * public static void main(String[] args) throws Exception {
104104 * SpringApplication.run(MyApplication.class, args);
105105 * }
106106 * </pre>
107- *
107+ *
108108 * <p>
109109 * For more advanced configuration a {@link SpringApplication} instance can be created and
110110 * customized before being run:
111- *
111+ *
112112 * <pre class="code">
113113 * public static void main(String[] args) throws Exception {
114114 * SpringApplication app = new SpringApplication(MyApplication.class);
115115 * // ... customize app settings here
116116 * app.run(args)
117117 * }
118118 * </pre>
119- *
119+ *
120120 * {@link SpringApplication}s can read beans from a variety of different sources. It is
121121 * generally recommended that a single {@code @Configuration} class is used to bootstrap
122122 * your application, however, any of the following sources can also be used:
123- *
123+ *
124124 * <p>
125125 * <ul>
126126 * <li>{@link Class} - A Java class to be loaded by {@link AnnotatedBeanDefinitionReader}</li>
127- *
127+ *
128128 * <li>{@link Resource} - An XML resource to be loaded by {@link XmlBeanDefinitionReader},
129129 * or a groovy script to be loaded by {@link GroovyBeanDefinitionReader}</li>
130- *
130+ *
131131 * <li>{@link Package} - A Java package to be scanned by
132132 * {@link ClassPathBeanDefinitionScanner}</li>
133- *
133+ *
134134 * <li>{@link CharSequence} - A class name, resource handle or package name to loaded as
135135 * appropriate. If the {@link CharSequence} cannot be resolved to class and does not
136136 * resolve to a {@link Resource} that exists it will be considered a {@link Package}.</li>
137137 * </ul>
138- *
138+ *
139139 * @author Phillip Webb
140140 * @author Dave Syer
141+ * @author Andy Wilkinson
141142 * @see #run(Object, String[])
142143 * @see #run(Object[], String[])
143144 * @see #SpringApplication(Object...)
@@ -151,7 +152,9 @@ public class SpringApplication {
151152 + "boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext" ;
152153
153154 private static final String [] WEB_ENVIRONMENT_CLASSES = { "javax.servlet.Servlet" ,
154- "org.springframework.web.context.ConfigurableWebApplicationContext" };
155+ "org.springframework.web.context.ConfigurableWebApplicationContext" };
156+
157+ private static final String SYSTEM_PROPERTY_JAVA_AWT_HEADLESS = "java.awt.headless" ;
155158
156159 private final Log log = LogFactory .getLog (getClass ());
157160
@@ -262,7 +265,10 @@ public ConfigurableApplicationContext run(String... args) {
262265 stopWatch .start ();
263266 ConfigurableApplicationContext context = null ;
264267
265- System .setProperty ("java.awt.headless" , Boolean .toString (this .headless ));
268+ System .setProperty (
269+ SYSTEM_PROPERTY_JAVA_AWT_HEADLESS ,
270+ System .getProperty (SYSTEM_PROPERTY_JAVA_AWT_HEADLESS ,
271+ Boolean .toString (this .headless )));
266272
267273 Collection <SpringApplicationRunListener > runListeners = getRunListeners (args );
268274 for (SpringApplicationRunListener runListener : runListeners ) {
@@ -540,7 +546,7 @@ protected void postProcessApplicationContext(ConfigurableApplicationContext cont
540546 if (this .resourceLoader != null ) {
541547 if (context instanceof GenericApplicationContext ) {
542548 ((GenericApplicationContext ) context )
543- .setResourceLoader (this .resourceLoader );
549+ .setResourceLoader (this .resourceLoader );
544550 }
545551 if (context instanceof DefaultResourceLoader ) {
546552 ((DefaultResourceLoader ) context ).setClassLoader (this .resourceLoader
@@ -573,7 +579,7 @@ protected void applyInitializers(ConfigurableApplicationContext context) {
573579 protected void logStartupInfo (boolean isRoot ) {
574580 if (isRoot ) {
575581 new StartupInfoLogger (this .mainApplicationClass )
576- .logStarting (getApplicationLog ());
582+ .logStarting (getApplicationLog ());
577583 }
578584 }
579585
0 commit comments