Spring组件概览图
一、Spring的核心组件为什么是Bean?
Spring组件众多,核心组件莫非有三,Context、Core以及Bean。而三者之中最核心的莫过于Bean。其实,Spring本身框架可以理解为面向Bean的编程(Bean Oriented Programming)。Spring作为目前最优秀的框架之一,它最核心的问题在于解决了一个非常关键的一个问题,它可以把对象之间的依赖关系抽离出来通过配置文件进行管理,也就是Spring最核心的理念 依赖注入--DI(Dependency Injection),而这种关系是通过IOC容器实现统一管理。而IOC容器又是什么呢?它其实就是通过Bean包装的各种对象。Spring实现了把通过Bean包装好的对象进行统一管理和额外操作的目的。Spring根据各个Bean设计它的生存环境,并让它在该环境中根据一定的约束不停的运动,达到与环境或者其它个体进行信息交换,这就是Spring的设计理念。
二、Spring的核心组件是如何协同工作的?
Bean包装的Object,而为Object中的数据提供生存环境,就是Context所要解决的问题,对于Context来讲,它的作用就是发现各个Bean之间的关系,并为这种关系建立良好的维护。所以我们可以理解Context其实就是各种Bean之间的关系集合,这个关系集合我们可以把它称作IOC容器。而在这个过程中,Core有什么作用呢?我们可以把Core当作Util来理解,Core就是在发现、建立、维护每个Bean之间关系所需要用到的一系列工具。举个例子,如果Bean当作一场演出中的各个演员, 那么Context就好比把各个演员串联起来的剧本,而Core则可以理解为这台演出中的各种道具。
三、Bean组件详解
Bean位于org.sringframework.beans包下,这个包主要解决了三个问题,Bean的定义、Bean的创建以及Bean的解析。对于使用者来说,我们通常只需要关注Bean的创建,其它两个问题在Spring内部自身解决。
Bean的创建模式是典型的工厂方法, 顶级接口是BeanFactory,它下面有三个子类,而最终的实现方式则都是由DefaultListableBeanFactory来实现,各个子类都有各自的使用场景,主要作用是区分Spring在内部对象的处理时,对数据所作出的限制和约束。
Bean的定义由beanDefinition描述,Bean的定义需要在配置文件中定义的<bean/>节点详细描述,当Spring成功解析一个Bean节点时,它会自动转化成BeanDefinition对象,以后所有的操作都是基于BeanDefinition来进行的。
而Bean的解析则相当复杂,因为为了保证足够的灵活性,被扩展的地方很多,以应对可能的变化。
四、Context组件详解
Context位于org.springframework.context包下,主要作用是维护各个Bean之间的关系集,为Spring提供运行环境。ApplicationContext是context的顶级父类,它基于5个接口,这5个接口扩展的context的功能。比如ResourcesPatternResolver 以及ListableBeanFactory。 ResourcesLoader表明, 在Spring运行的过程中,它可以访问到任何外部资源 ,而BeanFactory则印证了Spring运行的主题就是Bean。
总体来讲,Context主要完成的功能有以下四点:
1.标识一个应用环境;
2.利用BeanFactory创建Bean对象;
3.保存对象之间的各种关系;
4.能够监听各种事件;
五、Core组件详解
core位于org.springframework.core包下,前面我们讲到core包可以理解为一个Utils类,这里我们以资源的访问方式为例进行说明。
在Resources接口中封装了各种可能的资源类型。它继承了InputStreaSource接口,在该接口中实现了getInputStream方法, 返回的是InputStream类。因此所有的资源都可以通过InputStream类获取,这样实现了屏蔽资源提供者和资源类型的不同。同时对于资源加载的问题, 是通过ResourcesLoader来实现的,屏蔽了资源加载的差异。对于使用者来说,通过一个接口来屏蔽资源的类型以及加载方式,这种设计理念是值得借鉴的。Context在创建运行环境时,把资源的加载、解析和描述工作交给了ReSourcesPatternResolver来完成。它相当于一个接头人,把资源的加载、解析、和定义整合在一起。交给Context使用。
相关推荐
观察者模式 Observer:Swing中的事件模型<br>工厂模式 Factory:在JDK中遍地都是,比如JDBC、JNDI等,是学习Spring的基础<br>命令模式 Command:Struts框架的基石<br>单例模式 Singleton:最简单的设计模式,大量...
- `<spring.version>`:Spring框架的版本号。 - `<log4j.version>`:Log4j的日志库版本号。 #### 依赖管理 Pom.xml中的`<dependencies>`标签用于声明项目所需的依赖库,具体包括: 1. **Hibernate核心依赖**: `...
根据提供的文件信息,我们可以深入探讨如何使用Maven和Spring Security框架来构建一个安全的应用程序。以下将详细解析各个部分,并介绍这些配置是如何协同工作来确保应用程序的安全性的。 ### Maven依赖 在项目中...
<br>结合 JSTL <br><spring:bind> 标签 <br>数据绑定的几个方法 <br><spring:message> 标签 <br><spring:transform> 标签 <br>其它 View 层 <br>除了 JSP View 层技术之外,您还可以使用其它的 View 层技术,或建立...
Spring MVC是Spring框架的一部分,专门用于构建Web应用程序。它提供了丰富的功能,如请求映射、视图解析、数据绑定、异常处理等。为了设置Spring MVC,我们需要在项目中添加Spring MVC的相关依赖。在`pom.xml`文件中...
- **Spring Boot**:一个基于Spring框架的快速应用开发框架,旨在简化新Spring应用的初始搭建以及开发过程。它提供了开箱即用的配置,使得开发者能够更快地开始编写代码。 - **微服务架构**:一种设计模式,它将...
- **Spring版本**: `<spring.version>4.3.11.RELEASE</spring.version>` 定义了Spring框架的具体版本,这里是Spring 4.3.11.RELEASE。 - **JUnit版本**: `<junit.version>4.12</junit.version>` 指定了单元测试框架...
<groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.x</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web...
动态语言支持<br>第5篇 展现层应用<br>第19章 Spring MVC之一<br>第20章 Spring MVC之二<br>第21章 集成其他Web框架<br>第6篇 其他<br>第22章 Spring应用的测试<br>第23章 Spring工具类盘点<br>附录A 各种数据库连接...
<artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> ...
动态语言支持<br>第5篇 展现层应用<br>第19章 Spring MVC之一<br>第20章 Spring MVC之二<br>第21章 集成其他Web框架<br>第6篇 其他<br>第22章 Spring应用的测试<br>第23章 Spring工具类盘点<br>附录A 各种数据库连接...
<groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.23.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>...
动态语言支持<br>第5篇 展现层应用<br>第19章 Spring MVC之一<br>第20章 Spring MVC之二<br>第21章 集成其他Web框架<br>第6篇 其他<br>第22章 Spring应用的测试<br>第23章 Spring工具类盘点<br>附录A 各种数据库连接...
<spring-version>4.3.20.RELEASE</spring-version> </properties> <dependencies> <!-- Spring Core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> ...
Spring源代码解析1:IOC容器;Spring源代码解析2:IoC容器在Web容器中的启动;Spring源代码解析3:Spring JDBC ;...Spring源代码解析9:Spring Acegi框架鉴权的实现<br>Spring源代码解析10:Spring Acegi框架授权的实现
SSM框架是Java Web开发中常用的三大框架集成,包括Spring MVC、Spring和MyBatis。Maven作为项目管理和构建工具,能有效地管理依赖关系,帮助我们便捷地搭建SSM环境。下面将详细介绍如何使用Maven来搭建这个强大的...
<groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>...
<spring.version>4.0.2.RELEASE</spring.version> <mybatis.version>3.2.6</mybatis.version> <slf4j.version>1.7.7</slf4j.version> <log4j.version>1.2.17</log4j.version> </properties> <dependencies> <!...
<version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${org.springframework-version}</...