【Spring】16 ApplicationContextAware 接口

文章目录

      • 1. 简介
      • 2. 作用
      • 3. 使用
        • 3.1 创建并实现接口
        • 3.2 配置 Bean 信息
        • 3.3 创建启动类
        • 3.4 启动
      • 4. 应用场景
      • 总结

Spring 框架提供了许多回调接口,用于在 Bean 的生命周期中执行特定的操作。ApplicationContextAware 接口是其中之一,它允许 Bean 获取对 ApplicationContext 的引用。本文将介绍 ApplicationContextAware 接口的作用、使用方式,以及在实际应用中的常见场景。

1. 简介

ApplicationContextAware 是一个回调接口,用于在 Spring 容器实例化 Bean 后,将容器的上下文(ApplicationContext)传递给实现了该接口的 Bean。通过这个接口,Bean 可以获得对 Spring 容器的引用,从而获取容器中的其他 Bean 和资源。

源码如下

【Spring】16 ApplicationContextAware 接口_第1张图片

2. 作用

ApplicationContextAware 主要用于

  • 获取 ApplicationContext

    允许 Bean 在运行时获取对 Spring 容器的引用。

  • 与容器交互

    Bean 可以通过 ApplicationContext 与容器进行交互,例如获取其他 Bean 的引用、获取环境变量等。

3. 使用

要使用 ApplicationContextAware 接口,需要按以下步骤进行:

在这里插入图片描述

3.1 创建并实现接口

DemoBean.java

package org.example.cheney;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class DemoBean implements ApplicationContextAware {
    private HelloBean helloBean;

    public void print(String name) {
        // DemoBean 类中的处理逻辑
        System.out.println("[DemoBean]  Hi: " + name);

        // HelloBean 类中的处理逻辑
        helloBean.say(name);
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        // 通过 ApplicationContext 来获取 HelloBean 的引用
        this.helloBean = applicationContext.getBean(HelloBean.class);
    }
}

上面代码演示了如何通过实现 ApplicationContextAware 接口来获取 Spring 容器中的其他 Bean(在这里是 HelloBean),并在 DemoBean 类中使用这个引用执行业务逻辑。

HelloBean.java

package org.example.cheney;

public class HelloBean {

    public void say(String message) {
        System.out.println("[HelloBean] Hello: " + message);
    }
}

上面代码只有一个打印的 say 方法,实际开发时可以换成对应的逻辑

3.2 配置 Bean 信息

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd">

       <bean id="helloBean" class="org.example.cheney.HelloBean"/>
       <bean id="demoBean" class="org.example.cheney.DemoBean"/>
beans>

3.3 创建启动类
package org.example.cheney;

import org.springframework.context.support.AbstractXmlApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) {
        String location = "applicationContext.xml";
        try (AbstractXmlApplicationContext context = new ClassPathXmlApplicationContext(location)) {
            // 从容器中获取 DemoBean
            DemoBean demoBean = context.getBean(DemoBean.class);

            // 调用 DemoBean 类中的 print 方法
            demoBean.print("cheney");
        }
    }
}

3.4 启动

输出结果:

在这里插入图片描述

4. 应用场景

ApplicationContextAware 接口通常用于以下场景

  • 获取其他 Bean 的引用:

    当一个 Bean 需要与容器中的其他 Bean 进行交互时,可以使用 ApplicationContext 获取其他 Bean 的引用。

  • 获取环境变量:

    Bean 可以通过 ApplicationContext 获取容器的环境变量,例如配置文件中的属性值。

总结

Spring 框架提供了许多回调接口,用于在 Bean 的生命周期中执行特定的操作。通过实现 ApplicationContextAware 接口,Spring 提供了一种便捷的方式让 Bean 获取对 Spring 容器的引用。这使得 Bean 可以在运行时与容器进行交互,获取其他 Bean 的引用、获取环境变量等。

你可能感兴趣的:(Spring,spring,java,后端)