Spring 三大基础组件简介

简介:   一,Bean,Core,Context关系 在Spring的各种组件中,Bean,Core,Context算是基础组件(ExpressionLanguage表达式支持, 这个主要就是用来支持一些spring XML配置文件表达式 和 注解中一些表达式解析,让配置有动态特性,spring早期的版本是没有这货的,不算是特别必须的,特别核心的东西,只是为了灵活性加的),在Core container这一层构建起了整个Spring的骨骼架构。



 


 

一,Bean,Core,Context关系

 

Spring的各种组件中,Bean,Core,Context算是基础组件(ExpressionLanguage表达式支持, 这个主要就是用来支持一些spring

XML配置文件表达式 和 注解中一些表达式解析,让配置有动态特性,spring早期的版本是没有这货的,不算是特别必须的,

特别核心的东西,只是为了灵活性加的),在Core container这一层构建起了整个Spring的骨骼架构。在Spring中,强调的是对Bean的管理

,所以BeanSpring所要面向的对象,就像是我们的oop一样,object是我们要面向的。


spring的依赖注入主要解决的问题就是把对象之间的关系用配置文件来描述,而这个注入关系在一个叫IOC容器中管理,所以这个容器中

放置的就是被bean包裹的对象,通过把对象包装在bean中来达到对对象的管理以及进行一些额外的操作。

 

三大核心组件关系(from 热心网友,thx~~):

Bean 包装的是 Object,而 Object 必然有数据,如何给这些数据提供生存环境就是 Context要解决的问题,对 Context 来说他就是

要发现每个 Bean 之间的关系,为它们建立这种关系并且要维护好这种关系。所以 Context 就是一个Bean关系的集合,这个关系集合

又叫 Ioc 容器,一旦建立起这个 Ioc 容器后 Spring 就可以为你工作了。那 Core 组件又有什么用武之地呢?其实Core 就是发现

、建立和维护每个 Bean 之间的关系所需要的一些类的工具,从这个角度看来,Core 这个组件叫 Util 更能让你理解。

 

把Bean 比作一场演出中的演员的话,那 Context 就是这场演出的舞台背景,而 Core应该就是演出的道具了。只有他们在一起

才能具备能演出一场好戏的最基本的条件。当然有最基本的条件还不能使这场演出脱颖而出,还要他表演的节目足够的精彩,这些节目

就是 Spring 能提供的特色功能了。

 

 

 

二,核心组件简介

 

1Bean组件

 

 


 

 

 

Spring中,BeanFactory定义了spring容器的核心规范,它有三个子类:HierarchicalBeanFactoryAutowireCapableBeanFactory

ListableBeanFactory。ListableBeanFactory 接口表示这些Bean 是可列表的,而 HierarchicalBeanFactory 表示的是这些 Bean

是有继承关系的,也就是每个 Bean 有可能有父Bean。AutowireCapableBeanFactory 接口定义 Bean 的自动装配规则。


之后有很多接口跟实现类。每个接口都有他使用的场合,它主要是为了区分在 Spring内部在操作过程中对象的传递和转化过程中,

对对象的数据访问所做的限制。沿着上面的图观察,找到最后面,会发现最终的默认的实现类是DefaultListableBeanFactory。

这四个接口共同定义了 Bean 的集合、Bean 之间的关系、以及 Bean 行为。

 

Bean 的定义主要有由BeanDefinition 描述,如下图说明了这些类的层次关系:



 


 

 


Bean 的定义就是完整的描述了在 Spring 的配置文件中你定义的 <bean/>节点中所有的信息,包括各种子节点。当 Spring 成功解析

你定义的一个 <bean/> 节点后,在 Spring 的内部他就被转化成BeanDefinition 对象。以后所有的操作都是对这个对象完成的。

Bean的解析过程非常复杂,功能被分的很细,因为这里需要被扩展的地方很多,必须保证有足够的灵活性,以应对可能的变化。

Bean 的解析主要就是对 Spring配置文件的解析。这个解析过程主要通过下图中的类完成:


 

 


 

 

当然还有具体对 tag 的解析这里并没有列出。

 

 

 

2Context组件

 


 

 

 

从上图中可以看出 ApplicationContext 继承了 BeanFactory,这也说明了 Spring容器中运行的主体对象是 Bean,另外

ApplicationContext 继承了 ResourceLoader 接口,使得ApplicationContext 可以访问到任何外部资源,这将在 Core 中详细说明。


ApplicationContext 的子类主要包含两个方面:

  1. ConfigurableApplicationContext 表示该 Context 是可修改的,也就是在构建 Context 中用户可以动态添加或修改已有的配置信息,它下面又有多个子类,其中最经常使用的是可更新的 Context,即 AbstractRefreshableApplicationContext 类。
  2. WebApplicationContext 顾名思义,就是为 web 准备的 Context 他可以直接访问到 ServletContext,通常情况下,这个接口使用的少。

再往下分就是按照构建 Context 的文件类型,接着就是访问 Context 的方式。这样一级一级构成了完整的Context 等级层次。


总体来说 ApplicationContext 必须要完成以下几件事:

  • 标识一个应用环境
  • 利用 BeanFactory 创建 Bean 对象
  • 保存对象关系表
  • 能够捕获各种事件


Context 作为 Spring 的 Ioc 容器,基本上整合了 Spring 的大部分功能,或者说是大部分功能的基础。


 

3Core组件

 

Core 组件作为 Spring的核心组件,他其中包含了很多的关键类,其中一个重要组成部分就是定义了资源的访问方式。这种把所有资

源都抽象成一个接口的方式很值得在以后的设计中拿来学习。下面就重要看一下这个部分在Spring 的作用。


下图是 Resource 相关的类结构图:


 


 


 

从上图可以看出 Resource接口封装了各种可能的资源类型,也就是对使用者来说屏蔽了文件类型的不同。对资源的提供者来说,

如何把资源包装起来交给其他人用这也是一个问题,我们看到Resource 接口继承了 InputStreamSource 接口,这个接口中有个

getInputStream 方法,返回的是 InputStream类。这样所有的资源都被可以通过 InputStream这个类来获取,所以也屏蔽了资源

的提供者。另外还有一个问题就是加载资源的问题,也就是资源的加载者要统一,从上图中可以看出这个任务是由ResourceLoader

接口完成,他屏蔽了所有的资源加载者的差异,只需要实现这个接口就可以加载所有的资源,他的默认实现是DefaultResourceLoader。



下面看一下 Context 和 Resource 是如何建立关系的?首先看一下他们的类关系图:


 

 

 


 

从上图可以看出,Context 是把资源的加载、解析和描述工作委托给了 ResourcePatternResolver类来完成,他相当于一个接头人,

他把资源的加载、解析和资源的定义整合在一起便于其他组件使用。Core 组件中还有很多类似的方式。

 

 

 

 

 


目录
相关文章
|
7月前
|
NoSQL 安全 Java
深入理解 RedisConnectionFactory:Spring Data Redis 的核心组件
在 Spring Data Redis 中,`RedisConnectionFactory` 是核心组件,负责创建和管理与 Redis 的连接。它支持单机、集群及哨兵等多种模式,为上层组件(如 `RedisTemplate`)提供连接抽象。Spring 提供了 Lettuce 和 Jedis 两种主要实现,其中 Lettuce 因其线程安全和高性能特性被广泛推荐。通过手动配置或 Spring Boot 自动化配置,开发者可轻松集成 Redis,提升应用性能与扩展性。本文深入解析其作用、实现方式及常见问题解决方法,助你高效使用 Redis。
791 4
|
8月前
|
安全 Java 数据安全/隐私保护
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 三大核心组件
本课程介绍如何在Spring Boot中集成Shiro框架,主要讲解Shiro的认证与授权功能。Shiro是一个简单易用的Java安全框架,用于认证、授权、加密和会话管理等。其核心组件包括Subject(认证主体)、SecurityManager(安全管理员)和Realm(域)。Subject负责身份认证,包含Principals(身份)和Credentials(凭证);SecurityManager是架构核心,协调内部组件运作;Realm则是连接Shiro与应用数据的桥梁,用于访问用户账户及权限信息。通过学习,您将掌握Shiro的基本原理及其在项目中的应用。
330 0
|
8月前
|
负载均衡 Java Nacos
Spring Cloud五大组件
Spring Cloud五大组件
|
8月前
|
前端开发 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档—— Swagger 简介
第6课介绍了在Spring Boot中集成Swagger2以展示在线接口文档的方法。随着前后端分离架构的发展,API文档成为连接前端与后端开发的重要纽带。然而,代码更新频繁导致文档难以同步维护,Swagger2解决了这一问题。通过Swagger,在线API文档不仅方便了接口调用方查看和测试,还支持开发者实时测试接口数据。本文使用Swagger 2.2.2版本,讲解如何在Spring Boot项目中导入并配置Swagger2工具,从而高效管理接口文档。
300 0
|
5月前
|
Java API 数据库
JPA简介:Spring Boot环境下的实践指南
上述内容仅是JPA在Spring Boot环境下使用的冰山一角,实际的实践中你会发现更深更广的应用。总而言之,只要掌握了JPA的规则,你就可以借助Spring Boot无比丰富的功能,娴熟地驾驶这台高性能的跑车,在属于你的程序世界里驰骋。
219 15
|
4月前
|
JSON 前端开发 Java
Spring MVC 核心组件与请求处理机制详解
本文解析了 Spring MVC 的核心组件及请求流程,核心组件包括 DispatcherServlet(中央调度)、HandlerMapping(URL 匹配处理器)、HandlerAdapter(执行处理器)、Handler(业务方法)、ViewResolver(视图解析),其中仅 Handler 需开发者实现。 详细描述了请求执行的 7 步流程:请求到达 DispatcherServlet 后,经映射器、适配器找到并执行处理器,再通过视图解析器渲染视图(前后端分离下视图解析可省略)。 介绍了拦截器的使用(实现 HandlerInterceptor 接口 + 配置类)及与过滤器的区别
396 0
|
负载均衡 算法 Java
除了 Ribbon,Spring Cloud 中还有哪些负载均衡组件?
这些负载均衡组件各有特点,在不同的场景和需求下,可以根据项目的具体情况选择合适的负载均衡组件来实现高效、稳定的服务调用。
1076 61
|
XML 监控 Java
Spring Cloud全解析:熔断之Hystrix简介
Hystrix 是由 Netflix 开源的延迟和容错库,用于提高分布式系统的弹性。它通过断路器模式、资源隔离、服务降级及限流等机制防止服务雪崩。Hystrix 基于命令模式,通过 `HystrixCommand` 封装对外部依赖的调用逻辑。断路器能在依赖服务故障时快速返回备选响应,避免长时间等待。此外,Hystrix 还提供了监控功能,能够实时监控运行指标和配置变化。依赖管理方面,可通过 `@EnableHystrix` 启用 Hystrix 支持,并配置全局或局部的降级策略。结合 Feign 可实现客户端的服务降级。
791 23
|
XML 缓存 Java
spring源码剖析-spring-beans(内部核心组件,BeanDefinition的注册,BeanWapper创建)
spring源码剖析-spring-beans(内部核心组件,BeanDefinition的注册,BeanWapper创建)
193 10
|
人工智能 自然语言处理 Java
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
文章介绍了Spring AI,这是Spring团队开发的新组件,旨在为Java开发者提供易于集成的人工智能API,包括机器学习、自然语言处理和图像识别等功能,并通过实际代码示例展示了如何快速集成和使用这些AI技术。
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧

热门文章

最新文章