2. Spring IOC 与容器的概念

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Spring 框架的功能被有组织的分散到约 20 个模块中。这些模块分布在核心容器,数据访问/集成,Web,AOP(面向切面的编程),植入(Instrumentation),消息传输和测试,如下面的图所示。

Spring 框架的功能被有组织的分散到约 20 个模块中。这些模块分布在核心容器,数据访问/集成,Web,AOP(面向切面的编程),植入(Instrumentation),消息传输和测试,如下面的图所示。


image.pngimage.pngimage.png

image.png


核心容器模块



核心容器 由以下模块组成,spring-core, spring-beans,spring-context,spring-context-support,和spring-expression (Spring表达式语言)。


spring-core和spring-beans模块提供了框架的基础功能,包括IOC和依赖注入功能。


BeanFactory 是一个成熟的工厂模式的实现。你不再需要编程去实现单例模式,允许你把依赖关系的配置和描述从程序逻辑中解耦。


上下文(spring-context)模块建立在由Core和Beans模块提供的坚实的基础上:它提供一个框架式的对象访问方式,类似于一个 JNDI 注册表。上下文模块从 Beans 模块继承其功能,并添加支持国际化(使用,例如,资源集合),事件传播,资源负载,并且透明创建上下文,例如,Servlet容器。Context 模块还支持 Java EE 的功能,如 EJB,JMX 和基本的远程处理。 ApplicationContext 接口是 Context 模块的焦点。 spring-context-support 支持整合普通第三方库到Spring应用程序上下文,特别是用于高速缓存(ehcache,JCache)和调度(CommonJ,Quartz)的支持。


spring-expression模块提供了强大的表达式语言去支持查询和操作运行时对象图。这是对 JSP 2.1 规范中规定的统一表达式语言(unified EL)的扩展。该语言支持设置和获取属性值,属性分配,方法调用,访问数组,集合和索引器的内容,逻辑和算术运算,变量命名以及从Spring的IoC容器中以名称检索对象。 它还支持列表投影和选择以及常见的列表聚合。


AOP 和 Instrumentation 模块



spring-aop 模块提供了一个符合AOP联盟(要求)的面向方面的编程实现,例如,允许您定义方法拦截器和切入点(pointcuts),以便干净地解耦应该被分离的功能实现。 使用源级元数据(source-level metadata)功能,您还可以以类似于.NET属性的方式将行为信息合并到代码中。


单独的 spring-aspects 模块,提供了与 AspectJ 的集成。


spring-instrument 模块提供了类植入(instrumentation)支持和类加载器的实现,可以应用在特定的应用服务器中。该 spring-instrument-tomcat 模块包含了支持 Tomcat 的植入代理。


BeanFactory 接口 和 ApplicationContext 接口



在基于 Spring 的应用中,你的应用对象生存于 Spring 容器(container)中。Spring 容器负责创建对象,装配它们,配置它们并管理它们的整个生命周期,从生存到死亡。


容器是 Spring 框架的核心。Spring 容器使用DI管理构成应用的组件,它会创建相互协作的组件之间的关联。毫无疑问,这些对象更简单干净,更易于理解,更易于重用并且更易于进行单元测试。


Spring 容器并不是只有一个。Spring 自带了多个容器实现,可以归为两种不同的类型。在 Spring Ioc 容器的代表就是 org.springframework.beans 包中的 BeanFactory 接口,BeanFactory 接口提供了 IoC 容器最基本功能;而 org.springframework.context 包下的 ApplicationContext 接口扩展了 BeanFactory,还提供了与 Spring AOP 集成、国际化处理、事件传播及提供不同层次的 context 实现,如针对 Web 应用的 WebApplicationContext。


简单说,BeanFactory 提供了 IoC 容器最基本功能,而 ApplicationContext 则增加了更多支持企业级功能支持。ApplicationContext 完全继承 BeanFactory,因而 BeanFactory 所具有的语义也适用于 ApplicationContext。


  • XmlBeanFactory:BeanFactory 实现,提供基本的 IoC 容器功能,可以从 classpath 或文件系统等获取资源。


Resource resource = new FileSystemResource(file); 
BeanFactory beanFactory = new XmlBeanFactory(resource);


使用应用上下文


Spring自带了多种类型的应用上下文。下面罗列的几个是你最有可能遇到的。

以下都是 ApplicationContext 的实现:


  • AnnotationConfigApplicationcontext: 从一个或多个基于 Java 的配置类中加载 Spring 应用上下文,


  • AnnotationConfiglebApplicationcontext: 从一个或多个基于 Java 的配置类中加载 SpringWeb 应用上下文。


  • ClassPathxmApplicationcontext: 从类路径下的一个或多个 XML 配置文件中加载上下文定义,把应用上下文的定义文件作为类资源。


  • FilesystemxmApplicationContext: 从文件系统下的一个或多个 XML 配置文件中加载上下文定义


  • XmlWebApplicationcontext: 从Web应用下的一个或多个 XML 配置文件中加载上下文定义.


bean的生命周期



在传统的Java应用中, bean的生命周期很简单。使用Java关键字new进行bean实例化,然后该bean就可以使用了。一旦该bean不再被使用,则由Java自动进行垃圾回收。


相比之下, Spring容器中的 bean的生命周期就显得相对复杂多了。正确理解Springbean的生命周期非常重要,因为你或许要利用Spring提供的扩展点来自定义bean的创建过程。


参考


Spring实战(第4版)-异步社区





目录
打赏
0
0
0
0
10
分享
相关文章
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
169 26
什么是Spring IOC 和DI ?
IOC : 控制翻转 , 它把传统上由程序代码直接操控的对象的调用权交给容 器,通过容器来实现对象组件的装配和管理。所谓的“控制反转”概念就是对组件对象控制权的转 移,从程序代码本身转移到了外部容器。 DI : 依赖注入,在我们创建对象的过程中,把对象依赖的属性注入到我们的类中。
【SpringFramework】Spring IoC-基于XML的实现
本文主要讲解SpringFramework中IoC和DI相关概念,及基于XML的实现方式。
127 69
Spring容器的本质
本文主要讨论Spring容器最核心的机制,用最少的代码讲清楚Spring容器的本质。
|
3月前
|
Spring底层架构核心概念解析
理解 Spring 框架的核心概念对于开发和维护 Spring 应用程序至关重要。IOC 和 AOP 是其两个关键特性,通过依赖注入和面向切面编程实现了高效的模块化和松耦合设计。Spring 容器管理着 Beans 的生命周期和配置,而核心模块为各种应用场景提供了丰富的功能支持。通过全面掌握这些核心概念,开发者可以更加高效地利用 Spring 框架开发企业级应用。
99 18
【SpringFramework】Spring IoC-基于注解的实现
本文主要记录基于Spring注解实现IoC容器和DI相关知识。
74 21
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
容器技术实践:在Ubuntu上使用Docker安装MySQL的步骤。
通过以上的操作,你已经步入了Docker和MySQL的世界,享受了容器技术给你带来的便利。这个旅程中你可能会遇到各种挑战,但是只要你沿着我们划定的路线行进,你就一定可以达到目的地。这就是Ubuntu、Docker和MySQL的灵魂所在,它们为你开辟了一条通往新探索的道路,带你亲身感受到了技术的力量。欢迎在Ubuntu的广阔大海中探索,用Docker技术引领你的航行,随时准备感受新技术带来的震撼和乐趣。
32 16
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
93 30