认识Spring框架

news2024/9/25 3:25:40

目录

1.了解Spring框架

2.了解Spring的体系结构

3.认识Spring家族

 4.实现第一个Spring入门程序


1.了解Spring框架

1.什么是Spring框架?

Spring是一个轻量级的控制反转(IoC)和面向切面的容器框架。

关键词概念解释:

  • 1.轻量级:从大小和开销两方面来说,Spring都是轻量级的,完整的Spring框架可以在只有一个1MB多的jar文件中发布,并且Spring是非侵入式的,也就是说Spring应用中的对象并不依赖于Spring的特定类
  • 2.控制反转:Spring通过控制反转(IoC)降低了耦合,IoC能够让一个对象依赖的其他对象通过被动的方式传递过来,而不是这个对象自己进行创建或者寻找其他依赖对象
  • 3.面向切面:允许通过分离应用的业务逻辑与系统级的服务进行内聚式的开发,应用对象只实现它们应该做的。并不负责其他的比如日志和事务的支持
  • 4.容器:Spring包含并且管理应用对象的配置和生命周期,在这个意义上它是一种容器,用户可以通过配置自己的每一个Bean,用户的Bean可以创建一个单独的实例或者每次都需要生成一个新的实例,以及他们之间是如何相互关联的
  • 5.框架:Spring可以将简单的组件配置、组合成复杂的应用。在Spring中,应用对象被声明式得组合

2.Spring框架有什么优点?

  1. 降低代码的耦合度
  2. 提供了依赖注入(DI)和控制反转(IoC)的功能,使得对象的创建和组装更加灵活和可配置。
  3. 支持面向切面编程(AOP),可以通过切面进行代码的横切关注点的处理,提高了代码的模块化和可维护性。
  4. 提供了一套完整的企业级开发解决方案,包括数据访问、事务管理、MVC框架等,简化了开发流程。
  5. 整合了各种常用的开源技术和第三方库,如Hibernate、MyBatis、JPA、Redis等,方便开发者进行集成和使用。
  6. 提供了强大的异常处理机制,可以通过统一的异常处理方式进行全局的异常处理和错误信息的处理。

2.了解Spring的体系结构

Spring的功能模块被分割成了20个模块中,这些模块分布在核心的容器、数据访问集成、Web、AOP、植入、消息传输和测试,如下图所示

 下面介绍其中的模块与功能

1.核心容器

Spring的核心容器是由其他模块建立的,由Spring-core、Spring-beans、Spring-context、Spring-context-support、Spring-expression 等。

模块功能
Spring-core提供Spring框架的核心基础,包括依赖注入机制、Bean生命周期管理和资源加载等。
Spring-beans定义、创建、管理和解析Bean对象,支持配置文件和注解方式进行配置和实例化。
Spring-context扩展了Spring-beans模块,提供事务管理、面向切面编程、事件处理、国际化等高级功能,管理应用程序上下文。
Spring-context-support辅助模块,提供与特定环境的集成支持,如Java EE、缓存和任务调度等。
Spring-expression提供强大的表达式语言,用于动态处理和访问对象的属性,支持统一的表达式语法。

2.AOP(面对切面编程) 和 Instrumentation(植入)

Spring框架中AOP和Instrumentation相关的模块有Spring--aop模块、Spring-aspect模块、以及Spring-instrument模块

模块功能
Spring-aop提供面向切面编程(AOP)的支持,允许将横切关注点从业务逻辑中分离出来。它通过代理模式和动态代理技术实现,可以在运行时对方法进行拦截和增强,实现例如日志记录、性能监控等功能。
Spring-aspect扩展了Spring-aop模块,提供了基于注解的切面编程的支持。使用Spring-aspect模块,开发人员可以通过注解方式来定义切面,并实现相应的拦截和增强逻辑。
Spring-instrument提供了与Java Instrumentation API的集成支持,用于在运行时修改字节码或者进行类加载的控制。它可以用于实现一些高级的AOP功能,如基于字节码的切面编程、动态类加载等。

3.消息

Spring4.0后框架中增加了消息Spring-messaging模块

模块功能
Spring-messaging提供了基于消息的通信模型的支持,用于构建异步、松耦合的应用程序。它包含了一些核心接口和类,如Message、MessageHandler等,以及消息代理、消息队列和消息转换器等功能。

 4.数据访问/集成

数据访问/集成由JDBC、ORM、OXM、JMS和事务模块组成

模块功能
Spring-jdbc提供了对JDBC(Java数据库连接)的支持,简化了与关系型数据库的交互。它提供了一组简单、一致的API,用于执行SQL操作、处理事务以及管理连接池等功能。
Spring-tx提供了对事务的支持,简化了在Spring应用程序中使用事务的配置和管理。它包括声明式事务的支持,通过注解或XML配置来定义事务边界,以及编程式事务的支持,通过编程方式控制事务的开始、提交和回滚等操作。
Spring-orm提供了对对象关系映射(ORM)的支持,简化了将Java对象与关系数据库之间进行映射的工作。它支持各种ORM框架(如Hibernate、MyBatis等),提供了一组统一的API,用于定义对象映射、执行查询、插入、更新和删除等操作,以及处理事务和缓存等功能。
Spring-oxm提供了对对象-XML映射(OXM)的支持,方便Java对象与XML文档之间的转换。它支持各种XML处理库(如JAXB、Castor等),提供了一组统一的API,用于对象到XML的序列化和反序列化,以及处理XML文档的校验、转换和映射等功能。
Spring-jms提供了对Java消息服务(JMS)的支持,简化了在Spring应用程序中使用消息传递的配置和开发。它包括发送和接收消息、定义消息监听器以及与消息代理的集成等功能。通过Spring-jms,可以实现与消息队列的通信和异步消息处理。

5.Web

Web层由Spring-web、Spring-webmvc、Spring-websocket和Portlet模块组成

模块功能
Spring-web提供了基本的Web支持,包括与Servlet容器的集成、Web应用上下文的配置以及处理Web请求和相应等功能。它提供了一组通用的Web工具类和辅助方法,用于处理URL解析、文件上传、Cookie、Session等操作。
Spring-webmvc提供了基于MVC(Model-View-Controller)的Web框架,用于构建灵活和可扩展的Web应用程序。它包括控制器、视图解析器、数据绑定、验证、消息转换和异常处理等功能,使开发者能够更轻松地实现业务逻辑与页面展示的分离。
Spring-websocket提供了对WebSocket协议的支持,用于构建实时的Web应用程序。它包括WebSocket会话管理、消息处理和广播等功能,允许客户端和服务器之间进行全双工的通信。WebSocket可以实现实时推送、聊天应用、股票行情等场景。
Portlet提供了对JSR-286 Portlet规范的支持,用于构建基于Portlet容器的Web应用程序。它提供了一组与Portlet规范对应的类和接口,简化了在Portlet环境下开发Web应用程序的工作。开发者可以通过Portlet模块将Spring的特性应用于Portlet应用。

6.测试

测试由Spring-test模块组成

Spring-test功能:

  1. 提供了用于创建和配置Spring应用程序上下文的工具类和注解,如@ContextConfiguration和ApplicationContextInitializer等,方便在测试中加载Spring配置文件或配置类。
  2. 提供了用于模拟和控制外部依赖的工具类和注解,如@MockBean和@SpyBean等,用于创建模拟对象或代理对象,以便在测试中进行依赖注入和模拟方法调用。
  3. 提供了用于执行HTTP请求和验证响应的工具类和注解,如@AutoConfigureMockMvc和MockMvc等,方便测试Web层的请求和响应。
  4. 提供了用于执行数据库操作和管理事务的工具类和注解,如@DirtiesContext和TransactionalTestExecutionListener等,用于在测试中管理数据库事务和数据准备。
  5. 提供了用于编写和运行集成测试的工具类和注解,如@SpringBootTest和@TestPropertySource等,方便进行完整的应用程序集成测试。

3.认识Spring家族

在Spring的官网中可以看到Spring中有许多的成员模块,而这些模块组合起来就构成了整个Spring框架

下面就介绍一下Spring的家族成员

Spring家族成员相关作用
Spring Framework提供了依赖注入(DI)、面向切面编程(AOP)、数据访问、事务管理、Web开发等功能
Spring Boot基于Spring Framework的快速应用程序开发框架,简化了Spring应用程序的搭建和配置
Spring Data提供了与不同数据存储技术集成的模块,简化了数据访问层的开发
Spring Security提供了身份验证、授权、密码加密等功能,用于保护应用程序的安全性
Spring Cloud用于构建分布式系统和微服务架构的工具集合
Spring Integration用于构建企业级集成解决方案的框架,支持与外部系统交互、消息传递、数据转换等功能
Spring Batch用于处理大规模批量作业的框架,适用于数据清洗、ETL处理等场景
Spring WebFlux基于反应式流和非阻塞IO的Web开发框架,提供了更高的吞吐量和可扩展性
Spring Mobile用于开发移动应用程序的工具集合,支持设备适配、移动网络处理和推送通知等功能

 4.实现第一个Spring入门程序

条件:Tomcat服务器、Maven构建工具、

Tomcat服务器下载:

通过Idea部署Tomcat服务器(细图文教学)_idea tomcat 自动部署_Alphamilk的博客-CSDN博客

Maven构建工具下载:

Maven构建工具下载与配置(图文详细)_Alphamilk的博客-CSDN博客

需要准备四个基本包(core、beans、context、expression)和common-logging包

设置依赖

</dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>

  </dependencies>

创建一个UsrDao接口

package org.example;

public interface UsrDao {
    public void show();
}

创建实现类

package org.example;

import org.springframework.stereotype.Repository;

@Repository("usrDao")
public class UsrDaoImp implements UsrDao{

    @Override
    public void show() {
        System.out.println("UsrDao showing");
    }
}

创建UsrService接口

package org.example;

public interface UsrService {
    public void show();
}

创建UsrService实现接口

package org.example;

import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service("usrService")
public class UsrServiceImp implements UsrService {
    @Resource(name = "usrDao")
    private UsrDao usrDao;

    @Override
    public void show() {
        this.usrDao.show();
        System.out.println("UserService Now");
    }
}

在当前目录下创建beans.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
       xmlns:context="http://www.springframework.org/schema/context"
>
    <context:component-scan base-package="org.example" />
    <bean id="usrDao" class="org.example.UsrDaoImp" />
</beans>

最后做一个测试类

package org.example;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
    public static void main(String[] args) {
        String xmlPath = "org.example/beans.xml";
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
        UsrService usrService = (UsrService) applicationContext.getBean("usrService");
        usrService.show();
    }
}

 


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/900150.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023国赛数学建模思路 - 案例:ID3-决策树分类算法

文章目录 0 赛题思路1 算法介绍2 FP树表示法3 构建FP树4 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模…

2028量产?兰博基尼首款纯电车型Lanzador亮相,双电机四驱跨界GT

经过多次预热之后&#xff0c;兰博基尼的首款纯电车型Lanzador终于在8月19日正式亮相。这款车以较完整的面貌出现在大众面前&#xff0c;将于2028年开始正式量产。虽然Lanzador仍是一个暂定名字&#xff0c;但它来自西班牙语&#xff0c;意为“投手”、“发射器”和“推动者”&…

C++笔记之注册的含义

C笔记之注册的含义 code review! 文章目录 C笔记之注册的含义1.注册对象到Qt的信号槽系统中2.注册函数到Qt的元对象系统中元对象系统例1例2 3.注册自定义类型到C STL容器中4.将函数指针传递给另一个类&#xff0c;注册回调函数class ICallback存在的意义例1&#xff0c;用于说…

专业课只考2门,计算机学硕最低分290的江苏院校

南京工业大学 考研难度&#xff08;☆&#xff09; 内容&#xff1a;23考情概况&#xff08;拟录取和复试分析&#xff09;、专业目录、23复试详情、各专业考情分析。 正文1332字&#xff0c;预计阅读&#xff1a;3分钟。 2023考情概况 南京工业大学计算机相关各专业复试和…

Intellij中直接运行ts配置:run configuration for typescript

在Intellij中可以借助插件run configuration for typescript直接运行typescript&#xff1a; run configuration for typescript插件本质还是依赖于 ts-node 来运行&#xff0c;只是其可以帮助我们自动配置好 ts-node 运行参数&#xff0c;简化使用。 第一步&#xff1a;安装…

uniapp配置添加阿里巴巴图标icon流程步骤

文章目录 下载复制文件到项目文件夹里项目配置目录结构显示图标 下载 阿里巴巴icon官网 https://www.iconfont.cn/ 复制文件到项目文件夹里 项目配置目录结构 显示图标

带你了解建堆的时间复杂度

目录 用向上调整建堆的时间复杂度 1.向上调整建堆的时间复杂度O(N*logN) 2.数学论证 3.相关代码 用向下调整建堆的时间复杂度 1.建堆的时间复杂度为O(N) 2.数学论证 3.相关代码 完结撒花✿✿ヽ(▽)ノ✿✿ 博主建议:面试的时候可能会被面试官问到建堆时间复杂度的证明过…

安卓手机的充电原理

安卓手机的充电原理是通过充电器将交流电转换为直流电&#xff0c;然后通过USB接口传输到手机电池中。手机电池的充电过程分为三个阶段&#xff1a;涓流充电、恒流充电和恒压充电。 充电动画 涓流充电是用来先对完全放电的电池单元进行预充&#xff08;恢复性充电&#xff09…

pdf 转 word

pdf 转 word 一、思路 直接调用LibreOffice 命令进行文档转换的命令行工具 使用的前系统中必须已经安装了 libreofficelibreoffice已翻译的用户界面语言包: 中文 (简体)libreoffice离线帮助文档: 中文 (简体)上传字体 重点&#xff1a;重点&#xff1a;重点&#xff1a; 亲…

蓝光眼镜有效吗?科研团队:无法证明防蓝光镜片可以减少视力伤害

8 月 19 日消息&#xff0c;本次由墨尔本大学、莫纳什大学和伦敦城市大学联合进行的科研团队&#xff0c;对来自 6个国家和地区的 17 项已发表的研究进行了深入研究。他们的研究发现&#xff0c;无法证明防蓝光镜片能够减少眼睛的视力伤害或改善佩戴者的睡眠质量等功效。 这项研…

【网络教程】如何获取阿里云盘的refresh_token

文章目录 获取阿里云盘的refresh_token 获取阿里云盘的refresh_token 这里在Edge浏览器上进行演示首先我们需要登入我们的阿里云盘然后按F12进入开发者模式&#xff0c;在菜单栏选择应用程序&#xff0c;然后在左边菜单找到 本地存储 下的 https://www.aliyundrive.com 这个域…

深入理解【二叉树】

&#x1f4d9;作者简介&#xff1a; 清水加冰&#xff0c;目前大二在读&#xff0c;正在学习C/C、Python、操作系统、数据库等。 &#x1f4d8;相关专栏&#xff1a;C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 &#x1f44d…

开发过程中自己遇到的异常(四)

mysql 报错&#xff1a;‘Lost connection to MySQL server during query 出现这种情况大多是因为&#xff0c;两个事物抢一个表的使用权造成的。 show processlist; 观察Command 列&#xff0c;有明显的update&#xff0c;insert, delete 时间比较久的&#xff0c;直接kill掉…

unity 之Transform组件(汇总)

文章目录 理论指导结合例子 理论指导 当在Unity中处理3D场景中的游戏对象时&#xff0c;Transform 组件是至关重要的组件之一。它管理了游戏对象的位置、旋转和缩放&#xff0c;并提供了许多方法来操纵和操作这些属性。以下是关于Transform 组件的详细介绍&#xff1a; 位置&a…

微服务系列文章之 SpringBoot 最佳实践

Spring Boot 是一种广泛使用且非常流行的企业级高性能框架。 以下是一些最佳实践和一些技巧&#xff0c;我们可以使用它们来改进 Spring Boot 应用程序并使其更加高效。 Spring Boot 的四大核心 1、自动配置 针对很多Spring应用程序和常见的应用功能&#xff0c;Spring Boo…

Linux 线程的概念与实现方式

一、线程的概念 线程是进程内部的一条执行序列或执行路径&#xff0c;一个进程可以包含多条线程。 一个进程中有两条或多条执行路径的时候&#xff0c;它们是可以同时执行的&#xff0c;也就是说&#xff0c;一个进程中的多个线程是可以同时执行的。当我们需要一个程序同时执行…

【LeetCode-简单题】49. 字母异位词分组

题目 题解一:排序哈希表 思路:由于互为字母异位词的两个字符串包含的字母相同&#xff0c;因此对两个字符串分别进行排序之后得到的字符串一定是相同的&#xff0c;故可以将排序之后的字符串作为哈希表的键。 核心api: //将字符串转换为字符数组char[] ch str.toCharArray();…

飞机打方块(二)游戏界面制作

一、背景 1.新建bg节点 二、飞机节点功能实现 1.移动 1.新建plane节点 2.新建脚本GameController.ts,并绑定Canvas GameControll.ts const { ccclass, property } cc._decorator;ccclass export default class NewClass extends cc.Component {property(cc.Node)canvas:…

详解strcmp函数

strcmp函数是用来比较两个字符串的&#xff0c;按理来说&#xff0c;比较结果只有两种&#xff1a;相同或不同。但是&#xff0c;事实上&#xff0c;strcmp函数在设计时会有三种情况&#xff0c;下面详细介绍&#xff1a; 这个函数的输入为两个字符串的首元素地址&#xff08;即…

Hlang--用Python写个编程语言-逻辑运算

文章目录 前言关键词解析token解析器解释器语法表示前言 在上一篇文章里面,实现了基本的变量,并且详细地阐述了基本原理,所以的话,这里要实现的就是这个判断,由于架子基本上打好了,后面的操作无法就是确定这个AST的一个执行顺序,也就是我们希望解释器执行的一个情况。 …