ApplicationContext到底是什么
- 父类HierarchicalBeanFactory:拥有获取父BeanFactory的功能
- 父类ListableBeanFactory:拥有获取beanNames的功能
- 父类ResourcePatternResolver:资源加载器,可以一次性获取多个资源(文件资源等等)
- 父类EnvironmentCapable:可以获取运行时环境(没有设置运行时环境功能)
- 父类ApplicationEventPublisher:拥有广播事件的功能(没有添加事件监听器的功能)
- 父类MessageSource:拥有国际化功能
ApplicationContext的类关系图
ApplicationContext的父类BeanFactory核心功能
- getBean:Bean工厂主要方法,获取Bean。
- containsBean:是否包含某个Bean。
- isSingleton:是否是单例的Bean。
- isPrototype:是否是原型的Bean。
- isTypeMatch:判断Bean是否匹配指定的类型。
- getType:获取Bean的类型。
- getAliases:获取别名。
ApplicationContext的资源加载器的功能
// 得到ApplicationContext的对象
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
// 加载类文件测试
Resource resource = context.getResource("file://D:\\java\\zfcq\\src\\main\\java\\com\\cangqiong\\service\\Test.java");
System.out.println(resource.contentLength());
System.out.println(resource.getFilename());
// 加载网站测试
Resource resource1 = context.getResource("https://www.baidu.com");
System.out.println(resource1.contentLength());
System.out.println(resource1.getURL());
// 加载配置文件测试
Resource resource2 = context.getResource("classpath:spring.xml");
System.out.println(resource2.contentLength());
System.out.println(resource2.getURL());
// 一次性获取多个文件
Resource[] resources = context.getResources("classpath:com/cangqiong/*.class");
for (Resource resource : resources) {
System.out.println(resource.contentLength());
System.out.println(resource.getFilename());
}
ApplicationContext的获取环境配置的功能
// 得到ApplicationContext的对象
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
// 获取系统参数
Map<String, Object> systemEnvironment = context.getEnvironment().getSystemEnvironment();
System.out.println(systemEnvironment);
System.out.println("=======");
// 获取系统配置
Map<String, Object> systemProperties = context.getEnvironment().getSystemProperties();
System.out.println(systemProperties);
System.out.println("=======");
// 全部参数
MutablePropertySources propertySources = context.getEnvironment().getPropertySources();
System.out.println(propertySources);
System.out.println("=======");
System.out.println(context.getEnvironment().getProperty("NO_PROXY"));
System.out.println(context.getEnvironment().getProperty("sun.jnu.encoding"));
System.out.println(context.getEnvironment().getProperty("zhangwei"));
结束语
- 获取更多本文的前置知识文章,以及新的有价值的文章,让我们一起成为架构师!
- 关注公众号,可以让你对MySQL、并发编程、spring源码有深入的了解!
- 关注公众号,后续持续高效的学习JVM!
- 这个公众号,无广告!!!每日更新!!!