一、主类:
package cn.edu.tju.study.service.anno;
import cn.edu.tju.study.service.anno.config.MyConfig;
import cn.edu.tju.study.service.anno.domain.Person;
import com.sun.javafx.runtime.SystemProperties;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.core.env.Environment;
import java.util.Map;
public class AnnoTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.register(MyConfig.class);
context.refresh();
System.out.println("after refresh......");
Environment environment = context.getBean("environment", Environment.class);
System.out.println(environment);
System.out.println("#########################################################");
Map<String, Object> systemProperties = context.getBean("systemProperties", Map.class);
System.out.println(systemProperties);
System.out.println("#########################################################");
Map<String, Object> systemEnv = context.getBean("systemEnvironment", Map.class);
System.out.println(systemEnv);
}
}
二、在哪里添加了上述3个bean?
context.refresh()这个方法,其代码片段如下

其中的prepareBeanFactory方法包含代码片段如下:

其中ENVIRONMENT_BEAN_NAME为environment,SYSTEM_PROPERTIES_BEAN_NAME为systemProperties,SYSTEM_ENVIRONMENT_BEAN_NAME为systemEnvironment,
可见代码片段中注册了上述3个名字的bean,其对象分别通过getEnvironment方法、getEnvironment.getSystemProperties方法、getEnvironment.getSystemEnvironment方法获取。
registerSingleton方法的代码如下:

其中super.registerSingleton的代码如下:

其中addSingleton的代码如下:
