1、ApplicationContext的主要作用
- 管理Bean对象:ApplicationContext负责管理应用程序中的所有Bean对象,包括配置文件中定义的Bean对象和通过注解或其他方式定义的Bean对象。它负责创建、配置和管理Bean实例,并提供对它们的访问和控制。通过ApplicationContext,我们可以轻松地将Bean对象注入到其他Bean中,实现Bean之间的依赖关系。
- 资源管理:ApplicationContext可以加载和管理各种资源,如配置文件、XML文件、Properties文件等。它提供了一个统一的接口,使得我们可以方便地访问和使用这些资源。
- 国际化支持:ApplicationContext提供了国际化的支持,可以根据不同的语言环境加载不同的资源文件,从而实现多语言的支持。
- 事件处理:ApplicationContext可以发布事件,并允许其他组件注册监听器来处理这些事件。这样可以实现组件之间的解耦,使得应用程序更加灵活和可扩展。
- AOP支持:ApplicationContext提供了对面向切面编程的支持,可以通过配置切面来实现横切关注点的模块化。
- 事件传播:实现了ApplicationListener接口的bean,使得应用程序可以监听和响应Bean生命周期事件。
- 模块化编程:支持通过不同的XML文件或Java类定义不同的bean,实现模块化编程。
- 覆盖框架默认设置:提供覆盖框架默认设置的能力,允许开发者通过参数化配置很容易地管理多个环境下的部署。
- 总之,ApplicationContext是Spring中最重要的容器之一,它不仅提供了管理对象和解决依赖关系的便利方式,还支持国际化、资源管理、事件处理等功能,使Spring应用程序的开发和管理更加高效、灵活和可扩展。
2、实例分析
import org.springframework.context.ApplicationContext;
从导包我们可以看出是spring自带的,可以随springboot项目启动自动注入引用的。
3、手动获取
package com.xunmei.api;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* 获取Spring上下文对象
* ========================
* Created with IntelliJ IDEA.
* User:zy
* Date:2021/8/26
* Time:23:25
* 码云:http://git.oschina.net/jnyqy
* ========================
*/
@Component
public class ApplicationContextProvider
implements ApplicationContextAware
{
/**
* 上下文对象实例
*/
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
/**
* 获取applicationContext
* @return
*/
public ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* 通过name获取 Bean.
* @param name
* @return
*/
public Object getBean(String name){
return getApplicationContext().getBean(name);
}
/**
* 通过class获取Bean.
* @param clazz
* @param <T>
* @return
*/
public <T> T getBean(Class<T> clazz){
return getApplicationContext().getBean(clazz);
}
/**
* 通过name,以及Clazz返回指定的Bean
* @param name
* @param clazz
* @param <T>
* @return
*/
public <T> T getBean(String name,Class<T> clazz){
return getApplicationContext().getBean(name, clazz);
}
}
2.1外部同样是可以获取到指定Bean的实例,修改ApplicationContext实例对象为静态实例,方法改为静态方法
@Component
public class ApplicationContextProvider
implements ApplicationContextAware
{
/**
* 上下文对象实例
*/
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
/**
* 获取applicationContext
* @return
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* 通过name获取 Bean.
* @param name
* @return
*/
public static Object getBean(String name){
return getApplicationContext().getBean(name);
}
/**
* 通过class获取Bean.
* @param clazz
* @param <T>
* @return
*/
public static <T> T getBean(Class<T> clazz){
return getApplicationContext().getBean(clazz);
}
/**
* 通过name,以及Clazz返回指定的Bean
* @param name
* @param clazz
* @param <T>
* @return
*/
public static <T> T getBean(String name,Class<T> clazz){
return getApplicationContext().getBean(name, clazz);
}
}