【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 @ 2022-02-20 23:45  程序java圈  阅读(244)  评论(0编辑  收藏  举报