StandardEnvironment will create systemProperties/systemEnvironment PropertySource.

AnnotationConfigApplicationContext default create the StandardEnvironment, but actually didn't use it(replaced by setEnvironment)

Maybe we should change and SpringApplication.createApplicationContext and AnnotationConfigApplicationContext (pass existed Environment) ?

ref:

AnnotationConfigApplicationContext(AbstractApplicationContext).getEnvironment() line: 319
AnnotationConfigApplicationContext(AbstractApplicationContext).getEnvironment() line: 1
AnnotatedBeanDefinitionReader.getOrCreateEnvironment(BeanDefinitionRegistry) line: 296
AnnotatedBeanDefinitionReader.<init>(BeanDefinitionRegistry) line: 71
AnnotationConfigApplicationContext.<init>() line: 66
NativeConstructorAccessorImpl.newInstance0(Constructor<?>, Object[]) line: not available [native method]
NativeConstructorAccessorImpl.newInstance(Object[]) line: 62
DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 45
Constructor<T>.newInstance(Object...) line: 423
BeanUtils.instantiateClass(Constructor<T>, Object...) line: 204
BeanUtils.instantiateClass(Class<T>) line: 139
SpringApplication.createApplicationContext() line: 585
SpringApplication.run(String...) line: 310
AnnotationConfigApplicationContext(AbstractApplicationContext).setEnvironment(ConfigurableEnvironment) line: 307
AnnotationConfigApplicationContext.setEnvironment(ConfigurableEnvironment) line: 111
SpringApplication.prepareContext(ConfigurableApplicationContext, ConfigurableEnvironment, SpringApplicationRunListeners, ApplicationArguments, Banner) line: 365
SpringApplication.run(String...) line: 311
SpringApplication.run(Class<?>[], String[]) line: 1247
SpringApplication.run(Class<?>, String...) line: 1236

Comment From: snicoll

Thanks for the PR but I don't think the extra complexity is worth it. There are cases where AnnotationConfigApplicationContext is used without a call to setEnvironment so the optimization not applicable in all cases either.