【Spring】BeanFactory与ApplicationContext——ApplicationContext常用实现类

server/2024/12/26 16:17:19/

Spring 框架的 IoC(控制反转)容器为我们提供了灵活且强大的对象管理能力。作为 IoC 容器的核心,ApplicationContext 提供了比 BeanFactory 更加丰富的功能,如国际化支持、事件传播、AOP(面向切面编程)等。理解 ApplicationContext 的不同实现类及其应用场景,对于构建高效、可维护的企业级应用至关重要。

一、ApplicationContext 的重要性

在实际开发中,ApplicationContext 是我们与 Spring 框架交互的主要方式。它负责创建、配置和管理应用程序中的所有对象(Bean)。不同的 ApplicationContext 实现类提供了不同的功能和特性,适用于不同的应用场景。

可以将 ApplicationContext 想象成一个大型的智能家居系统:

  • 家居控制中心:作为 ApplicationContext,它能够管理所有的智能设备(Bean),并根据需要对它们进行配置和控制。

  • 不同的控制方式:比如通过手机应用、语音助手等方式来控制这些设备,就像不同的 ApplicationContext 实现类可以提供不同的功能和接口。

二、常用的 ApplicationContext 实现类
  1. ClassPathXmlApplicationContext

  2. FileSystemXmlApplicationContext

  3. AnnotationConfigApplicationContext

  4. WebApplicationContext

接下来,我们将逐一介绍这些实现类,并提供具体的示例。

1. ClassPathXmlApplicationContext

ClassPathXmlApplicationContext 是最常用的 ApplicationContext 实现之一,主要用于从类路径下加载 XML 配置文件。

示例代码
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class ClassPathXmlApplicationContextExample {public static void main(String[] args) {// 从类路径加载 XML 配置文件ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");// 获取 BeanMyBean myBean = (MyBean) context.getBean("myBean");myBean.doSomething();}
}// MyBean.java
public class MyBean {public void doSomething() {System.out.println("Doing something in ClassPathXmlApplicationContext...");}
}
解释
  • ClassPathXmlApplicationContext 从类路径中加载 beans.xml 配置文件。

  • 通过 getBean 方法获取 MyBean 实例并调用其方法。

2. FileSystemXmlApplicationContext

FileSystemXmlApplicationContext 用于从文件系统加载 XML 配置文件,适合需要从特定路径加载配置的场景。

示例代码
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;public class FileSystemXmlApplicationContextExample {public static void main(String[] args) {// 从文件系统加载 XML 配置文件ApplicationContext context = new FileSystemXmlApplicationContext("C:/path/to/beans.xml");// 获取 BeanMyBean myBean = (MyBean) context.getBean("myBean");myBean.doSomething();}
}// MyBean.java
public class MyBean {public void doSomething() {System.out.println("Doing something in FileSystemXmlApplicationContext...");}
}
解释
  • FileSystemXmlApplicationContext 从指定的文件系统路径加载 beans.xml

  • 适用于配置文件不在类路径下的情况,提供更大的灵活性。

3. AnnotationConfigApplicationContext

AnnotationConfigApplicationContext 是用于基于注解的配置的 ApplicationContext 实现,适合使用 Java 配置类的场景。

示例代码
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class AnnotationConfigApplicationContextExample {@Beanpublic MyBean myBean() {return new MyBean();}public static void main(String[] args) {// 创建 AnnotationConfigApplicationContextApplicationContext context = new AnnotationConfigApplicationContext(AnnotationConfigApplicationContextExample.class);// 获取 BeanMyBean myBean = context.getBean(MyBean.class);myBean.doSomething();}
}// MyBean.java
public class MyBean {public void doSomething() {System.out.println("Doing something in AnnotationConfigApplicationContext...");}
}
解释
  • AnnotationConfigApplicationContext 用于处理基于 Java 注解的配置。

  • 通过 @Configuration 注解标识配置类,@Bean 注解用于定义 Bean。

  • 适合现代 Spring 应用程序,减少 XML 配置的使用。

4. WebApplicationContext

WebApplicationContext 是为 Web 应用程序提供的扩展,通常与 Spring MVC 一起使用,支持更复杂的 Web 应用场景。

示例代码
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.XmlWebApplicationContext;public class WebApplicationContextExample {public static void main(String[] args) {// 创建 WebApplicationContextWebApplicationContext context = new XmlWebApplicationContext();((XmlWebApplicationContext) context).setConfigLocation("WEB-INF/beans.xml");context.refresh();// 获取 BeanMyBean myBean = (MyBean) context.getBean("myBean");myBean.doSomething();}
}// MyBean.java
public class MyBean {public void doSomething() {System.out.println("Doing something in WebApplicationContext...");}
}
解释
  • WebApplicationContextApplicationContext 的子接口,专为 Web 应用设计。

  • 支持特定于 Web 的功能,如会话管理、请求范围的 Bean 等。

  • 通常在 Spring MVC 应用中使用,能够更好地支持控制器和视图解析。

三、总结

通过对 ApplicationContext 常用实现类的详细介绍,我们可以看到每种实现类都有其特定的应用场景和优缺点:

  • ClassPathXmlApplicationContext:适合从类路径加载 XML 配置,简单易用。

  • FileSystemXmlApplicationContext:适合从文件系统加载配置,灵活性更高。

  • AnnotationConfigApplicationContext:适合基于注解的配置,符合现代开发趋势。

  • WebApplicationContext:专为 Web 应用设计,提供 Web 特性支持。

理解这些实现类的特点和使用场景,能够帮助开发者在实际项目中选择合适的 ApplicationContext,提高应用的可维护性和扩展性。希望通过本次介绍,能够帮助学员全面深入地掌握 ApplicationContext 的常用实现类及其应用。


http://www.ppmy.cn/server/153368.html

相关文章

K8S中的PV、PVC介绍和使用

PV-PVC-SC图解 持久卷PV PV概述 persistent volumes持久卷,独立的存储资源,实现K8S持久化存储。可以由外部存储系统(如 NFS、GlusterFS、AWS EBS 等)支持。PV可以限制资源的大小和容器 访问模式官方介绍ReadWriteOnce (RWO)卷可…

maven的scope详解

Maven 的 scope(作用域)用于定义依赖项在构建生命周期中的可见性和使用范围。正确设置依赖项的作用域可以帮助优化构建过程,减少不必要的依赖,并确保项目在不同环境中(如编译、测试、运行时)能够正确工作。…

常用类晨考day15

1.基本数据类型以及对应包装类 Byte Short Integer Long Float Double Boolean Character 2.什么是自动拆箱和装箱,jdk版本有什么要求?代码举 例并标明 Integer a 100; // 装箱 int b a; // 拆箱 从JDK1.5才开始支持 3.NumberFormatException是什么异常…

workman服务端开发模式-应用开发-后端api推送修改一

一、修改后端api登录 在根目录下app文件夹下controller文件夹下common文件夹下Login.php文件下,修改doLogin方法,代码如下: //登录public function doLogin(){$param $this->request->param();$validate new \app\validate\common\L…

HarmonyOS NEXT 实战之元服务:静态案例效果---最近播放音乐

背景: 前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考 先上本期效果图 ,里面图片自行替换 效果图1完整代码案例如下: Index import { authentica…

TCP/IP 邮件

TCP/IP邮件是互联网通信中非常重要的应用之一。当我们发送电子邮件时,我们实际上并没有直接使用TCP/IP协议,而是通过电子邮件程序,例如微软的Outlook、莲花软件的Notes或Netscape Communicator等来实现。这些电子邮件程序背后使用了不同的TCP…

MFC小知识:CEdit::GetSel函数的使用

CEdit::GetSel函数是CEdit类的成员函数,它的功能是返回编辑框中光标选中区域的开始和结束位置,如果没有选取区域,则返回的就是光标位置(开始与结束位置相同)。这个函数可以通过CEdit类对象或对象指针调用,它…

谈谈JSON

中文名:JS键值对数据 英文名:JavaScript Object Notation JSON是一种常用的数据格式,其简洁和清晰的层次结构有效地提升了网络传输效率,很多编程语言都支持JSON格式的数据交换。 JSON 相比于 XML 来说,更小、…