Spring的基本概念和结构

目录

1、Spring框架的基本理解

(1)Spring的关键字

(2)什么是Spring框架

(3)Spring框架有哪些:

2、Spring体系结构

3、Spring框架有哪些模块组成?

(1)Core:核心模块

(2)Testing:测试模块

[(3)Data Access:数据访问模块](#(3)Data Access:数据访问模块)

[(4)Web Servlet:基于Servlet的Web应用开发](#(4)Web Servlet:基于Servlet的Web应用开发)

(5)Integration:企业级系统集成模块(不同系统之间的交互集成)

[4、Spring IOC的理解](#4、Spring IOC的理解)

[5、Spring IOC 容器的理解](#5、Spring IOC 容器的理解)

6、Spring结构框架与搭建

7、Spring两大思想


1、Spring框架的基本理解

(1)Spring的关键字

核心思想IOC\AOP作用(解耦、简化)简单描述框架组成

(2)什么是Spring框架

Spring框架是一款轻量级的开发框架,核心思想是 IOC**(控制反转)** 和 AOP**(面向切面编程)** ,为 Java 应用程序开发提供组件管理服务 ,用于组件之间的解耦 ,以及简化第三方JavaEE中间件技术的使用 (JMS、任务调度、缓存、ORM 框架),是一个基础架构型的开发框架;

(3)Spring框架有哪些:

IOC 容器、Validation 数据校验、AOP 面向切面编程、Transaction事务管理、Spring JDBC、Spring Mvc 框架、以及各类第三方 JavaEE 中间件技术集成;

2、Spring体系结构

3、Spring框架有哪些模块组成?

关键字 :官方文档描述,由7个模块组成。

Spring Framework:根据官方文档的描述,主要包括以下常用5个模块;

(1)Core:核心模块

包括:IOC Container(loc容器),Events(事件通知机制)、Resources(资源加载机制)、i18n(国际化)、Validation(数据校验)、Data Binding(数据绑定)、Type Conversion(类型转换),SpEL(Spring表达式)、AOP(面向切面编程)

(2)Testing:测试模块

包括:Mock 0biects(测试模拟对象),TestContext Framework(测试框架),Spring MVCTest(用于测试Spring Mvc),webTestclient(用于测试 Webclient、Restful、 webflux 等);

(3)Data Access:数据访问模块

包括:Transactions(事务管理),DAO Support(统一的Data Access Object DAO 模式封装),JDBC(Spring对于JDBC的操作),O/R Mapping(Spring对于对象映射框架的封装,例如Hibernate等框架)等;

(4)Web Servlet:基于Servlet的Web应用开发

包括:Spring MVC(Spring 基于 MVC 模式设计封装的Web 框架),WebSocket(Spring)集成WebSocket,WebSocket是一个服务器与客户端双向通信的技术)等;

(5)Integration:企业级系统集成模块(不同系统之间的交互集成)

包括:Remoting(spring 用于在分布式系统中进行远程服务调用的通讯框架),IMS(Spring集成各类Java消息中间件、Java消息服务[JavaMessage Service]、例如ActiveMQ等),Java Emai1(邮件发送),Tasks Scheduling(任务调度);

4、Spring IOC的理解

关键字 :IOC名词解释,作用是解耦,使用IOC容器管理项目组件之间的耦合关系。

IOC(Inversion of Control,中文释义:控制反转),是Spring框架的核心思想之一,主要用于解耦。IOC是指将创建对象的控制权转移给Spring框架进行管理,由Spring框架根据配置文件或注解等方式,创建bean对象并管理各个bean对象之间的依赖关系。使对象之间形成松耦合的关系,实现解耦。

  • 控制:指的是对象的创建(实例化、管理)的权利
  • 反转:控制权交给外部环境(Spring框架、IOC容器)

硬编码实现解耦:

  • 不要直接new对象,通过反射创建。
  • 将需要创建的对象独立保存在资源文件中,动态加载。

5、Spring IOC 容器的理解

关键字:IOC容器的作用、存储形式、初始化过程。

IOC 通常被理解为IOC Container 容器,IOC 容器其实就是一个Map,key 是每个 bean 对象的ID,value 是 bean 对象本身。IOC 容器负责创建 bean 对象并管理 bean 的生命周期并且根据配置好配置文件或注解,管理 IOC 容器中的每个 bean ,以及根据 bean 之间的依赖关系,完成 bean 之间的注入。

IOC 容器属于 Spring Core 模块,用来创建和管理 Bean ,默认使用单例 的方式将 bean 存储在DefaultListableBeanFactory 类的 beanDefinitionMap 中(一个 ConcurrentHashMap 类型的Map集合);

IOC 容器使用 ConcurrentHashMap 集合存储了 BeanDefinition 对象,该对象封装了 Spring对一个 Bean 所有配置信息,包括: 类名,属性,构造方法参数,依赖,是否延迟加载,是否是单例等配置信息;

6、Spring结构框架与搭建

其中包括controller(视图层/视图层)、dao(数据访问层)、service(业务逻辑层)、test(测试层)、util(工具类层)、resources(配置文件层)。

util层代表的是工具类层,就是为了减少耦合而产生。

java 复制代码
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
return applicationContext;

ApplicationContext 是Spring框架中的一个接口,表示Spring的IOC容器(Inversion of Control Container),它负责管理和配置应用程序的所有bean。ApplicationContext 提供了比 BeanFactory 更强大的功能,例如国际化支持、事件传播、声明式机制等。

ClassPathXmlApplicationContext 是 ApplicationContext 接口的一个实现类,它从类路径下加载XML配置文件来构建应用程序上下文。

resources层代表的是配置文件层,也是为了减少耦合而创建的,跟MyBatis中的配置JDBC类似。

XML 复制代码
<bean id="dao" class="com.apesource.dao.UserDaoImpl"></bean>
<bean id="service" class="com.apesource.service.UserServiceImpl"></bean>

这段代码是Spring框架中的配置文件片段,使用的是Spring的XML配置方式来定义bean(即对象)的实例及其依赖关系。可以通过.getBean来获取对象。

java 复制代码
IUserDao userDao = (IUserDao) BeansFactory.getApplicationContext().getBean("dao");

getBean("dao"):ApplicationContext接口中的一个方法,用于根据bean的名称获取bean实例。在这里,获取的bean的名称是"dao"。

7、Spring两大思想

IOC控制反转,DI依赖注入

  • IOC容器:springIOC搭建spring容器管理程序中的各个组件(class)让程序可以实现高内聚,低耦合的编程。
  • AOP面向切面编程

SpringIOC:

  • 找到需要以解耦方式获取实例对象的类;
  • 将需要spring管理的类注入spring容器 - <bean id="唯一标识" class="类"></bean>;
  • 向spring容器中索取java实例(解耦);
  • 加载spring核心配置文件,获取spring容器对象 - ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
  • 获取对象 - Student student = (Student) applicationContext.getBean("student");

关键词:

BeanFactory(父)

ApplicationContext(子)

  • ClassPathXmlApplicationContext==>通过加载主配置文件的相对路径,获取spring容器
  • FileSystemXmlApplicationContext==>通过加载主配置文件的绝对路径,获取spring容器
  • AnnotationConfigApplicationContext==>加载配置类,获取spring容器 == 类名.class
相关推荐
clever1019 分钟前
在QtCreator 4.10.2中调试qt程序qDebug()输出中文为乱码问题的解决
开发语言·qt
测试开发Kevin30 分钟前
小tip:换行符CRLF 和 LF 的区别以及二者在实际项目中的影响
java·开发语言·python
笨手笨脚の32 分钟前
Redis: Thread limit exceeded replacing blocked worker
java·redis·forkjoin·thread limit
霖霖总总35 分钟前
[小技巧60]深入解析 MySQL Online DDL:MySQL Online DDL、pt-osc 与 gh-ost 机制与最佳实践
数据库·mysql
Lenyiin1 小时前
Linux 基础IO
java·linux·服务器
松☆1 小时前
Dart 核心语法精讲:从空安全到流程控制(3)
android·java·开发语言
编码者卢布1 小时前
【Azure Storage Account】Azure Table Storage 跨区批量迁移方案
后端·python·flask
编码者卢布1 小时前
【App Service】Java应用上传文件功能部署在App Service Windows上报错 413 Payload Too Large
java·开发语言·windows
kaikaile19951 小时前
结构风荷载理论与Matlab计算
开发语言·matlab
切糕师学AI2 小时前
ARM 汇编器中的伪指令(Assembler Directives)
开发语言·arm开发·c#