Spring 中ApplicationContext

devtools/2024/12/22 20:05:22/

   ApplicationContext 是 Spring 框架中最重要的接口之一,用于提供 Spring IoC 容器的功能。它是一个比 BeanFactory 更高级的容器,负责管理 Spring bean 的生命周期,同时提供对各种企业服务的集成,例如事件传播、国际化、弱引用等。ApplicationContext 充当了 Spring 应用程序的核心,它不仅可以创建和管理 bean,还负责支持更加复杂的功能。

ApplicationContext 的主要功能

  1. Bean 的创建和管理:负责实例化和管理应用中的所有 bean。
  2. 依赖注入:支持依赖注入,使得 bean 可以轻松地获取其依赖。
  3. 国际化支持:提供消息源以支持国际化功能,允许通过 MessageSource 对象进行文本信息的本地化。
  4. 事件传播:允许监听和发布事件,支持应用中的发布/订阅模式。
  5. Bean 的生命周期管理:支持初始化和销毁方法的配置。
  6. 资源加载:提供对资源(如文件和类路径资源)的访问功能。

常见的 ApplicationContext 实现

  • ClassPathXmlApplicationContext:从类路径中的 XML 文件加载应用上下文。
  • FileSystemXmlApplicationContext:从文件系统中的 XML 文件加载应用上下文。
  • AnnotationConfigApplicationContext:从 Java 配置类加载应用上下文,通常用于基于注解的配置。

使用示例

   以下是一个简单的示例,展示了如何使用 ApplicationContext 加载 bean 并进行依赖注入。

1. 引入 Spring 依赖

   在你的项目中引入 Spring 框架的依赖。以下是 Maven 项目的示例 pom.xml 配置:

java"><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.20</version>
</dependency>
2. 创建 Bean 类
java">public class MyBean {public void sayHello() {System.out.println("Hello, Spring!");}
}
3. 创建配置类

   使用注解配置的方式定义 Spring 上下文。

java">import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class AppConfig {@Beanpublic MyBean myBean() {return new MyBean();}
}
4. 使用 ApplicationContext
java">import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Main {public static void main(String[] args) {// 创建应用上下文ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);// 获取 bean 并调用方法MyBean myBean = context.getBean(MyBean.class);myBean.sayHello();}
}

结果

  运行上述代码时,你将看到输出:

java">Hello, Spring!

事件传播

   ApplicationContext 支持应用事件,你可以使用 ApplicationEventPublisher 来发布事件,并使用 ApplicationListener 来监听这些事件。

1. 创建事件类
java">import org.springframework.context.ApplicationEvent;public class MyEvent extends ApplicationEvent {public MyEvent(Object source) {super(source);}
}
2. 创建监听器
java">import org.springframework.context.ApplicationListener;public class MyEventListener implements ApplicationListener<MyEvent> {@Overridepublic void onApplicationEvent(MyEvent event) {System.out.println("Received event: " + event.getSource());}
}
3. 修改配置类以注册监听器和发布事件
java">import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class AppConfig {@Beanpublic MyBean myBean() {return new MyBean();}@Beanpublic MyEventListener myEventListener() {return new MyEventListener();}
}
4. 发布事件

在主方法中发布事件:

java">import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Main {public static void main(String[] args) {ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);MyBean myBean = context.getBean(MyBean.class);myBean.sayHello();// 发布事件context.publishEvent(new MyEvent("Hello, this is a custom event!"));}
}

事件输出

当运行代码时,您将看到输出:

java">Hello, Spring!
Received event: Hello, this is a custom event!

总结

  • ApplicationContext:是 Spring 的核心接口,提供了对 bean 管理、依赖注入、事件传播、国际化等功能的支持。
  • 实现类:最常用的实现类包括 ClassPathXmlApplicationContextFileSystemXmlApplicationContext 和 AnnotationConfigApplicationContext
  • 使用示例:通过注解方式创建 bean 和配置类,展示了如何使用 ApplicationContext 加载和使用 bean。
  • 事件传播:支持自定义事件发布和监听功能,扩展了应用的功能。

   通过 ApplicationContext,开发者可以构建灵活和可扩展的应用程序,充分利用 Spring 框架的强大功能。


http://www.ppmy.cn/devtools/95963.html

相关文章

Shell参考 - Linux Shell 训练营

出品方<Linux.cn & 阿里云开发者学堂> 一&#xff0c;Linux 可以划分为以下四个部分&#xff1a; 1. 应用软件 2. 窗口管理软件 Unity Gnome KDE 3. GNU 系统工具链 Software- GNU Project - Free Software Foundation 4. Linux 内核 二&#xff0c;什么是shell 1. L…

19. OTA功能 - 1

1. 概述 耳机采用AB分区的OTA方式,AB分区详见分区表,通过手机蓝牙下发更新文件。 OTA方案,目前主要依赖恒玄现有的方案。 参考:https://blog.csdn.net/zhanghuaishu0/article/details/117668173 2. APP下载 安卓直接应用宝搜Bestechnic 国外的google play搜Bestechnic…

高可用集群KEEPALIVED

一.高可用集群 1.1 集群类型 LB: 负载均衡HA: 高可用集群SPoF: 解决单点故障HPC: 高性能集群 1.2 系统可用性 AMTBF/(MTBFMTTR) 99.95%:(60*24*30)*(1-0.9995)21.6分钟 #一般按一个月停机时间统计 1.3 实现高可用 提升系统高可用的解决方案&#xff1a;降低平均故障时间…

Transformer架构;Encoder-Decoder;Padding Mask;Sequence Mask;

目录 Transformer架构 Transformer架构的主要组成部分: 简单举例说明输入和输出: Encoder-Decoder 编码器/解码器组成 6、位置前馈网络(Position-wise Feed-Forward Networks) 7、残差连接和层归一化 10、掩码Mask 10.1 Padding Mask 10.2 Sequence Mask 为什么…

【IDEA】idea配置服务器没有tomcat

IntelliJ IDEA 本身并不包含 Tomcat 服务器。 详细解释&#xff1a; IntelliJ IDEA 是一个集成开发环境 (IDE)&#xff0c;为软件开发提供各种工具和功能。它专注于代码编辑、调试、代码重构和版本控制等任务。Tomcat 是一个 Java Servlet 容器和 Web 服务器&#xff0c;用于…

gitlab实现CI/CD自动化部署

gitlab实现CI/CD自动化部署 项目根目录中新增gitlab-ci.yml在gitlab上查看gitlab-runner配置方法配置服务器环境推送代码&#xff0c;触发runner&#xff0c;实现自动构建和部署参考 gitlab支持通过配置CI/CD实现自动化部署我们的代码项目&#xff0c;主要核心就是配置gitlab-c…

Leetcode JAVA刷刷站(45)跳跃游戏 ||

一、题目概述 二、思路方向 为了解决这个问题&#xff0c;我们可以使用贪心算法。贪心算法在每一步都选择当前状态下的最优解&#xff0c;从而希望达到全局最优解。 在这个问题中&#xff0c;我们可以从数组的开头开始遍历&#xff0c;同时维护两个变量&#xff1a;steps 用来记…

react的setState中为什么不能用++?

背景&#xff1a; 在使用react的过程中产生了一些困惑&#xff0c;handleClick函数的功能是记录点击次数&#xff0c;handleClick函数被绑定到按钮中&#xff0c;每点击一次将通过this.state.counter将累计的点击次数显示在页面上 困惑&#xff1a; 为什么不能直接写prevStat…