一、主类:
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()这个方法,其代码片段如下
![在这里插入图片描述](https://img-blog.csdnimg.cn/1f61d3f8f96949aea50bec5e69ef72f2.png)
其中的prepareBeanFactory方法包含代码片段如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/75819d6c8faf4f4ba7a959b4539b2e28.png)
其中ENVIRONMENT_BEAN_NAME为environment,SYSTEM_PROPERTIES_BEAN_NAME为systemProperties,SYSTEM_ENVIRONMENT_BEAN_NAME为systemEnvironment,
可见代码片段中注册了上述3个名字的bean,其对象分别通过getEnvironment方法、getEnvironment.getSystemProperties方法、getEnvironment.getSystemEnvironment方法获取。
registerSingleton方法的代码如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/db116c7ae4184557a8e7130dc9fef535.png)
其中super.registerSingleton的代码如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/06d6750ab44243b8917209bc1a83000f.png)
其中addSingleton的代码如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/71e1c389d1a04726abe32acde3639213.png)