【spring】ApplicationContext详解

ApplicationContext到底是什么

  • 父类HierarchicalBeanFactory:拥有获取父BeanFactory的功能
  • 父类ListableBeanFactory:拥有获取beanNames的功能
  • 父类ResourcePatternResolver:资源加载器,可以一次性获取多个资源(文件资源等等)
  • 父类EnvironmentCapable:可以获取运行时环境(没有设置运行时环境功能)
  • 父类ApplicationEventPublisher:拥有广播事件的功能(没有添加事件监听器的功能)
  • 父类MessageSource:拥有国际化功能

ApplicationContext的类关系图

ApplicationContext的类关系图.png

ApplicationContext的父类BeanFactory核心功能

BeanFactory的方法.png

  • 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!
  • 这个公众号,无广告!!!每日更新!!!
    作者公众号.jpg
posted @   程序java圈  阅读(500)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示