applicationContext上下文对象的使用

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);
    }
}
上下文对象(Context)是Android中一个重要的概念,它代表了当前应用程序的运行环境。每个Activity、Service、BroadcastReceiver、ContentProvider等组件都是一个Context对象,它们都继承自Context类或其子类。 Context对象提供了许多与应用程序环境相关的方法,例如获取应用程序包名、获取资源、启动Activity、发送Broadcast等等。通过Context对象,我们可以访问应用程序的各种资源和服务,同时也可以在应用程序中创建新的组件。 在Android中,我们经常需要传递一个Context对象作为参数,例如在创建Intent对象、创建Toast提示或者在获取SharedPreferences等操作时。通常情况下,我们可以使用当前的Activity作为上下文对象,例如: ```java Intent intent = new Intent(MainActivity.this, SecondActivity.class); ``` 这里的MainActivity就是当前的Activity,它继承自Context类,可以作为一个Context对象使用。 另外,在某些情况下,我们也可以使用ApplicationContext作为上下文对象,例如在创建全局的单例对象时,可以使用Application作为上下文对象,例如: ```java public class MyApp extends Application { private static MyApp instance; @Override public void onCreate() { super.onCreate(); instance = this; } public static MyApp getInstance() { return instance; } } ``` 这里的MyApp继承自Application类,它是一个全局的单例对象,可以在整个应用程序中使用。在这个例子中,我们将MyApp对象保存在静态变量中,然后通过getInstance()方法来获取它。在获取SharedPreferences等操作时,我们可以使用MyApp.getInstance()作为上下文对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bst@微胖子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值