SSM框架-Spring框架核心知识梳理

 

目录

一、SpringIoC

1.1认识SpringIoC容器

1.2基于xml配置SpringIoC容器

1.3基于xml配置下Bean的生命周期和作用域

1.4 基于xml与注解配置SpringIoC容器

1.5 基于完全注解类配置SpringIoc容器

二、SpringAop面对切面编程

2.1认识SpringAop面向切面编程

2.2SpringAop基于注解配置

2.3通知注解

三、Spring-Tx事务

3.1Spring-Tx事务


Spring框架的核心内容分为三个部分

分别是SpringIoC容器、SpringAop面向切面编程、SpringTx事务。以下将分别介绍对应的核心内容的相关知识。


一、SpringIoC

1.1认识SpringIoC容器

原文:认识SpringIOC容器_Alphamilk的博客-CSDN博客

核心内容:

一、Spring Framework

  1. Spring Framework是一个开源的应用程序框架,由SpringSource公司开发,最初是为了解决企业级开发中的常见问题而创建的。它提供了丰富的功能,如依赖注入(DI)、面向切面编程(AOP)、声明式事务管理等,使得企业级应用程序的开发变得更加简单和快速。
  2. Spring Framework是Spring大家族中的基础实现,包括Spring Cloud、Spring MVC等技术都是建立在Spring Framework之上的。
  3. Spring Framework具有丰富的生态,模块化设计以及简化Java开发的优势。它不断创新和发展,引入新的特性和功能,满足不同场景下的需求。

二、Spring IOC容器

  1. Spring IOC容器是一种复杂容器,能够管理组件之间的依赖关系,并负责创建和销毁组件。与普通容器相比,它具有更多的功能和特性。
  2. 组件是能够重用的对象,比如在三层框架中,可以将三层架构拆分成三个组件。
  3. Spring管理组件的优势包括降低组件之间的耦合性、提高代码的可重用性和可维护性,方便配置和管理,并提供其他功能如AOP、事务管理等。
  4. SpringIOC容器的核心接口包括BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的扩展,提供了更多高级功能和特性。
  5. ApplicationContext有四个具体实现类,分别适用于不同的场景和配置方式,如ClassPathXmlApplicationContext、FileSystemXmlApplicationContext、AnnotationConfigApplicationContext和WebApplicationContext。

三、Spring IOC的核心功能

  1. Spring的核心功能是Spring IOC(控制反转)和DI(依赖注入)。
  2. 控制反转(IOC)是指将对象的创建和调用控制权从应用程序转移到容器中,由容器负责创建和管理对象,并通过依赖注入的方式将对象的依赖关系注入到应用程序中。
  3. 依赖注入(DI)是在组件之间传递依赖关系的过程中,将依赖关系的处理交给容器来完成,避免在应用程序代码中硬编码对象之间的依赖关系,实现对象之间的解耦。
  4. 依赖注入可以通过构造函数注入、Setter方法注入和接口注入三种形式实现,通过注解或XML配置文件进行配置。
  5. Spring的IOC容器和DI功能使得组件的管理和配置更加灵活、可重用和可维护,提高了代码的可测试性和可扩展性。

1.2基于xml配置SpringIoC容器

原文:基于XML实现SpringIoC配置_Alphamilk的博客-CSDN博客

核心

一、基于XML配置Spring IOC:

  1. 配置Spring IOC的jar包依赖。
  2. 编写XML配置文件,定义<bean>标签来表示组件,并配置组件的id和class属性。
  3. 实现组件的创建,包括无参构造方式创建、静态工厂创建和非静态工厂创建。

二、基于XML配置DI(依赖注入):

  1. 基于构造函数的DI,通过容器调用具有多个参数的构造函数来完成,可以使用单参数构造方法或多参数构造方法。

    • 单参数构造方法:在XML配置中使用<constructor-arg ref="..." />来指定注入的对象。
    • 多参数构造方法:在XML配置中使用<constructor-arg name="..." value="..." ref="..." />来指定注入的参数。
  2. 基于setter函数的DI,通过容器调用组件的setter方法来完成,可以使用<property name="..." value="..." ref="..." />来指定注入的属性值或引用。

三、创建ioc容器并获取组件

  1. 创建IoC容器:

    • 可以使用ApplicationContext接口的实现类,如ClassPathXmlApplicationContext,通过指定配置文件来创建容器对象。
    • 也可以先创建ApplicationContext的子类对象,再设置配置文件路径,并调用refresh()方法刷新容器。
  2. 通过容器获取组件的三种方式:

    • 第一种方式:使用getBean()方法和组件的ID获取组件,返回一个Object类型的对象,然后将其转换为对应的类型。
    • 第二种方式:使用getBean()方法同时指定组件的类型作为参数,直接返回对应的类型。
    • 第三种方式:根据组件的类型直接获取组件,无需指定组件的ID。

1.3基于xml配置下Bean的生命周期和作用域

原文:SpringIoC组件的高级特性_Alphamilk的博客-CSDN博客

 一、Bean的生命周期

  1. 生命周期 在对应的JavaBean类中创建相应的无参方法,并在配置<bean>标签中添加init-method和destroy-method属性。

示例:<bean id="beanId" class="com.example.BeanClass" init-method="initMethod" destroy-method="destroyMethod"/>

二、Bean的作用域

  1. 作用域 首先介绍两种作用域:单例模式和多例模式。
  1. 单例模式(Singleton) - 默认 指的是在配置<bean>标签后,通过获取组件时只会获取到同一个对象。容器只会创建一个唯一的bean对象,不会再新建对象。

示例:<bean id="beanId" class="com.example.BeanClass" scope="singleton"/>

  1. 多例模式(Prototype) 在多例模式下,配置一个<bean>组件后,每次获取该组件时,容器都会创建一个新的对象。

示例:<bean id="beanId" class="com.example.BeanClass" scope="prototype"/>


1.4 基于xml与注解配置SpringIoC容器

原文:SpringIoC基于注解配置_Alphamilk的博客-CSDN博客

一、注解方式和扫描(IoC)

  • 注解方式是使用特定的注解来标记组件,例如@Component、@Repository、@Service、@Controller。
  • 扫描是指Spring容器自动扫描指定包下的组件,并将其实例化和管理起来。

二、配置文件介绍

  • 配置文件可以用于指定组件扫描的包,可以包含或排除特定的注解。
  • 普通配置可以直接指定要扫描的包。
  • 包含注解的配置可以指定包,并只扫描指定注解的组件。
  • 排除注解的配置可以指定包,并排除特定注解的组件。
  • 组件Bean的名称可以通过指定name属性来设置。

三、组件作用域和周期方法注解

  • 周期方法是在组件创建、销毁、初始化等不同生命周期阶段执行的方法。
  • 可以使用@PostConstruct注解在组件创建后执行初始化方法。
  • 可以使用@PreDestroy注解在组件销毁前执行清理方法。
  • Bean的作用域可以通过@Scope注解进行配置。

四、引用类型自动装配(DI)

  • 自动装配是指Spring容器自动将依赖注入到组件中。
  • 自动装配可以根据类型进行匹配,将符合类型的对象注入到组件中。
  • 自动装配的三种场景分别是byName、byType和构造函数自动装配。

五、基本类型属性赋值(DI)

  • 可以直接通过属性赋值来设置组件的基本类型属性。
  • 也可以使用@Value注解来进行属性赋值。

1.5 基于完全注解类配置SpringIoc容器

原文:基于配置类方式管理 Bean_Alphamilk的博客-CSDN博客

一、完全注解开发理解:

  • 完全注解配置是通过Java配置类和注解来替代XML配置文件。
  • 完全注解配置具有更强的类型安全性和可读性。

二、配置类和扫描注解:

  • 使用@Configuration标记一个类为配置类,用来定义Spring Bean和配置其他组件。
  • @PropertySource用于将外部属性文件加载到Spring环境中。
  • @ComponentScan用于指定要扫描的基础包,并将其下的类注册为Spring Bean。

三、通过AnnotationConfigApplicationContext创建IoC容器的两种方式:

  1. 直接创建AnnotationConfigApplicationContext并导入配置类。
  2. 创建AnnotationConfigApplicationContext实例后,调用register方法注册配置类。

四、@Bean定义组件:

  • @Bean用于声明一个方法生成一个由Spring管理的Bean。
  • 可以通过name/value属性指定Bean的名称。
  • 可以通过initMethod和destroyMethod属性指定Bean的自定义初始化和销毁方法。

五、@Bean注解的细节:

  • Bean的名称默认为方法名字,也可以通过@Bean(name="beanName")指定名称。
  • 可以通过在方法上使用@PostConstruct和@PreDestroy注解来定义Bean的初始化和销毁方法。
  • 可以通过@Bean的initMethod和destroyMethod属性指定Bean的初始化和销毁方法。
  • 可以通过@Scope注解指定Bean的作用域。

六、Bean组件之间的调用:

  • 可以直接调用其他Bean方法来获取对应的组件。
  • 也可以通过形参方式注入其他组件。

七、@Import扩展:

  • @Import可以将多个配置类整合成一个配置类。
  • 可以使用@ImportResource导入XML配置文件。

二、SpringAop面对切面编程

2.1认识SpringAop面向切面编程

原文:认识Spring AOP面向切面编程_Alphamilk的博客-CSDN博客

核心内容:

AOP(面向切面编程)是一种编程思维,用于解决OOP(面向对象编程)中非核心代码重复和难以维护的问题。AOP通过将横切关注点(如日志、事务、权限控制等)与业务逻辑分离,实现代码的清晰、简洁和易于维护。

AOP的核心概念包括:

  1. 切面(Aspect):封装与业务无关的公共行为,即横切关注点,便于代码重用和降低模块之间的耦合度。
  2. 通知(Advice):实现切面的具体功能,如前置通知、返回通知、异常通知、后置通知和环绕通知。
  3. 连接点(Joinpoint):被拦截到的方法,可以在方法执行前、执行后或抛出异常时应用通知。
  4. 切入点(Pointcut):定位连接点的表达式,指定被选中的连接点。
  5. 目标(Target):被代理的目标对象。
  6. 代理(Proxy):在目标对象上应用通知后生成的代理对象。
  7. 织入(Weaving):将通知应用到目标上,生成代理对象的过程。

Spring AOP框架是基于AOP编程思维的实现,封装了动态代理技术,简化了动态代理的实现过程。通过少量的配置,指定切入点和通知类型,即可实现面向切面的编程。Spring AOP可以应用于各种场景,如日志记录、事务处理、安全控制、性能监控、异常处理、缓存控制和动态代理等,提高代码的可维护性和重用性。


2.2SpringAop基于注解配置

原文:Spring AOP基于注解方式实现和细节_Alphamilk的博客-CSDN博客

一、Spring AOP底层技术:

  1. JDK动态代理:使用InvocationHandler接口实现代理,需要被代理的目标类必须实现接口。
  2. CGLIB动态代理:通过继承被代理的目标类实现代理,不需要目标类实现接口。
  3. AspectJ:早期的AOP框架,Spring AOP借用了AspectJ中的AOP注解。

二、AOP编程实现步骤:

  1. 使用注解配置:@Aspect将类标记为切面类,定义切面逻辑和增强方法的位置;@EnableAspectJAutoProxy开启AspectJ自动代理,启用Spring AOP功能。
  2. 导入相关依赖:包括Spring Aspects、Spring Context和Spring Test等。
  3. 定义增强方法:使用注解配置指定插入目标的位置,例如@Before、@After、@AfterReturning、@AfterThrowing和@Around等。
  4. 补全注解:将增强类加入到IOC容器中,并设置切面注解@Component和@Aspect。
  5. 开启AspectJ注解注释:在配置类中使用@EnableAspectJAutoProxy注解开启注解支持。

三、获取切点详细信息的方式:

  1. 使用JoinPoint接口:通过JoinPoint可以获取目标对象、目标对象的类、目标对象的简单类名、方法参数数组、方法签名等信息。
  2. 增强方法的参数:可以在增强方法中添加JoinPoint类型的参数,然后通过该参数获取目标对象的信息。

四、切点表达式语法: 切点表达式语法包括具体值和模糊值,可以用于定义切点的匹配规则。

五、切点表达式的重用:

  1. 在当前类中提取:使用@Pointcut注解声明一个空方法,并在方法上加上特定的切点表达式。其他增强方法可以通过调用该空方法来复用切点。
  2. 创建一个存储切点的类:创建一个单独的类用于存储切点,通过@Pointcut注解定义切点表达式。其他类中的增强方法可以通过引用该存储切点类的方法来复用切点。

2.3通知注解

原文:Spring Aop--通知注解_Alphamilk的博客-CSDN博客

一、环绕注解: 环绕注解(@Around)是Spring AOP中的一种通知类型,在目标方法执行前后进行环绕操作。它可以在方法调用前后增加额外的逻辑,例如日志记录、性能监控等。使用环绕注解需要创建ProceedingJoinPoint对象,并在方法内部通过该对象控制目标方法的执行流程。

优点:

  1. 灵活性高:可以在目标方法执行前后插入额外的逻辑代码,对方法的执行过程进行全面控制。
  2. 统一处理:将通用的逻辑代码抽取到切面中,实现统一的处理逻辑,避免在各个目标方法中重复编写相同的代码。
  3. 可以修改返回值:可以通过修改目标方法的返回值来影响最终的结果。

缺点:

  1. 复杂性增加:相对于其他类型的通知,使用环绕注解稍显复杂,需要更多的理解和掌握,特别是对于ProceedingJoinPoint的使用。
  2. 性能开销:因为环绕注解会包裹整个目标方法的执行流程,在某些情况下可能会带来一定的性能开销,特别是处理逻辑较为复杂的情况。
  3. 可能引入副作用:在环绕通知中对目标方法做任意修改时,需要谨慎操作,避免引入不可预料的副作用,导致程序出现异常或不正常的行为。

二、优先级注解: 优先级注解(@Order)是Spring框架中用于定义组件加载顺序的注解。可以用在类级别或方法级别上。多个组件实现了同一个接口或继承了同一个父类时,通过@Order注解可以指定它们的加载顺序。@Order值越小,优先级越高,具有更高的加载顺序。相同优先级的组件加载顺序是不确定的,最好将优先级设置为不同的值来避免不确定性。

使用@Order注解可以针对同一个方法有不同的增强,指定增强的执行顺序。


三、Spring-Tx事务

3.1Spring-Tx事务

原文:Spring-TX 事务_Alphamilk的博客-CSDN博客

核心内容

一、事务管理的种类:

  1. 编程式事务:手动编写代码管理事务,操作复杂。
  2. 声明式事务:通过注解或配置文件控制事务,代码简洁。

二、Spring事务管理器的使用:

  1. 接口:Spring事务管理器用于管理事务。
  2. 实现类:根据持久层框架选择合适的实现类。

三、事务注解的使用:

  1. 标记:用于标记需要事务管理的方法或类。
  2. 属性:包括只读模式、超时时间、指定异常和隔离级别。

四、事务属性的分类:

  1. 只读模式:限制事务是否只读。
  2. 超时时间:限制事务执行时间。
  3. 指定异常:指定事务回滚的异常类型。
  4. 隔离级别:定义事务的隔离级别。

五、事务的传播性属性:

  1. 定义事务之间的关系。
  2. 常用的属性有REQUIRED和REQUIRES_NEW。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows和Linux环境中安装Zookeeper具体操作

1.Windows环境中安装Zookeeper 1.1 下载Zookeeper安装包 ZooKeeper官网下载地址 建议下载稳定版本的 下载后进行解压后得到如下文件&#xff1a; 1.2 修改本地配置文件 进入解压后的目录&#xff0c;将zoo_example.cfg复制一份并重命名为zoo.cfg,如图所示&#xff1a; 打…

AJAX学习笔记2发送Post请求

AJAX学习笔记1发送Get请求_biubiubiu0706的博客-CSDN博客 继续 AJAX发送POST请求 无参数 测试 改回来 测试 AJAX POST请求 请求体中提交参数 测试 后端打断点 如何用AJAX模拟form表单post请求提交数据呢&#xff1f; 设置请求头必须在open之后,send之前 请求头里的设置好比…

Windows配置SonarQube代码审查工具详细步骤(附带IDEA SonarLint插件使用)

文章目录 环境说明以及准备一. SonarQube的下载与安装二. 添加SonarQube项目三. 使用Maven命令上传代码到SonarQube四. IDEA安装SonarLint插件 环境说明以及准备 本篇博客使用的SonarQube版本为9.8&#xff0c;注意JDK 1.8已经不能支持 NameVersionDownLoad LinkSonarQube9.8…

org.mockito:mockito-core 组件安全漏洞及健康度分析

组件简介 维护者mockito组织许可证类型MIT首次发布2008 年 4 月 29 日最新发布时间2023 年 8 月 27 日GitHub Star14159GitHub Fork2478依赖包24,748依赖存储库145,258 org.mockito:mockito-core是一个流行的 Java 模拟框架&#xff0c;它提供了一个简洁的 API 来创建和使用模拟…

设计模式-7--代理模式(Proxy Pattern)

一、什么是代理模式&#xff08;Proxy Pattern&#xff09; 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许一个对象&#xff08;代理&#xff09;充当另一个对象&#xff08;真实对象&#xff09;的接口&#xff0c;以控制对该对象的…

函数指针与std::function<>对回调函数的实现与性能分析

函数指针与std::function<>都可以作为函数形参&#xff0c;通过接受另一个函数的地址来实现回调函数的功能&#xff0c;但是它们之间的性能差异非常明显。下面分别介绍对回调函数的实现与各自的性能分析。 函数指针与std::function<>对回调函数的实现 先在类中分…

PXE批量装机

目录 前言 一、交互式 &#xff08;一&#xff09;、搭建环境 &#xff08;二&#xff09;、配置dhcp服务 &#xff08;三&#xff09;、FTP服务 &#xff08;四&#xff09;、配置TFTP服务 &#xff08;五&#xff09;、准备pxelinx.0文件、引导文件、内核文件 &#…

l8-d5 字节序

一、主机字节序和网络字节序 字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序&#xff0c;分为&#xff1a; 大端字节序 (Big endian) 小端字节序(Little endian) 示例&#xff1a;0x11223344 一般主机当中使用小端字节序 网络通信当中必须使用大端字…

朝夕光年游戏自动化测试实践

朝夕光年是面向全球用户与开发者的游戏研发与发行业务品牌&#xff0c;致力于服务全球玩家&#xff0c;帮助玩家在令人惊叹的虚拟世界中一起玩耍与创造。 在游戏的研发过程中&#xff0c;游戏自动化一直是开展难度较大的工程&#xff0c;具体包括机房机架、设备调度、软件框架、…

【Java 基础篇】Java StringBuffer详解:更高效的字符串处理

在Java编程中&#xff0c;字符串是一个常见的数据类型&#xff0c;用于存储文本信息。然而&#xff0c;与字符串相关的操作可能会导致性能问题&#xff0c;因为字符串是不可变的&#xff0c;每次对字符串进行操作都会创建一个新的字符串对象。为了解决这个问题&#xff0c;Java…

【C++】异常处理详解

本篇文章重点将会对C中的异常的相关处理操作进行详解。希望本篇文章的内容会对你有所帮助。 目录 一、C语言的异常处理 二、C异常 2、1 异常概念 2、2 异常的使用 2、3 异常类 2、4 异常的重新抛出 三、异常的安全与规范 3、1 异常的安全 3、2 异常的规范 四、异常的优缺点 &am…

深入了解Kubernetes(k8s):安装、使用和Java部署指南(持续更新中)

目录 Docker 和 k8s 简介1、kubernetes 组件及其联系1.1 Node1.2 Pod1.3 Service 2、安装docker3、单节点 kubernetes 和 KubeSphere 安装3.1 安装KubeKey3.2 安装 kubernetes 和 KubeSphere3.3 验证安装结果 4、集群版 kubernetes 和 KubeSphere 安装5、kubectl 常用命令6、资…

【易售小程序项目】小程序首页完善(滑到底部数据翻页、回到顶端、基于回溯算法的两列数据高宽比平衡)【后端基于若依管理系统开发】

文章目录 说明细节一&#xff1a;首页滑动到底部&#xff0c;需要查询下一页的商品界面预览页面实现 细节二&#xff1a;当页面滑动到下方&#xff0c;出现一个回到顶端的悬浮按钮细节三&#xff1a;商品分列说明优化前后效果对比使用回溯算法实现ControllerService回溯算法 优…

git企业级使用

1.初始Git 1.1创建Git仓库 要提前说的是&#xff0c;仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制&#xff0c;就必须先创建⼀个仓库出来。创建⼀个Git本地仓库对应的命令为 git init &#xff0c;注意命令要在⽂件⽬录下执⾏&#xff0c;例如&#xff1a;…

docker安装gitlab

安装gitlab sudo docker run --detach \--hostname gitlab \--publish 543:443 --publish 90:80 --publish 222:22 \ --name gitlab \--restart always \--volume $GITLAB_HOME/config:/etc/gitlab \--volume $GITLAB_HOME/logs:/var/log/gitlab \--volume $GITLAB_HOME/data:…

RTPEngine 通过 HTTP 获取指标的方式

文章目录 1.背景介绍2.RTPEngine 支持的 HTTP 请求3.通过 HTTP 请求获取指标的方法3.1 脚本配置3.2 请求方式 1.背景介绍 RTPEngine 是常用的媒体代理服务器&#xff0c;通常被集成到 SIP 代理服务器中以减小代理服务器媒体传输的压力&#xff0c;其架构如下图所示。这种使用方…

使用Docker安装和部署kkFileView

&#x1f388;1 参考文档 kkFileView官方文档 &#x1f680;2 安装kkFileView 拉取Redis镜像。 docker pull keking/kkfileview启动docker容器。 docker run -it -d -p 8012:8012 keking/kkfileview --restart always解释&#xff1a; docker run redis # 从kkfileview镜像运行…

计算机视觉的应用12-卷积神经网络中图像特征提取的可视化研究,让大家理解特征提取的全过程

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用12-卷积神经网络中图像特征提取的可视化研究&#xff0c;让大家理解特征提取的全过程。 要理解卷积神经网络中图像特征提取的全过程&#xff0c;我们可以将其比喻为人脑对视觉信息的处理过程。就像…

《YOLOv5:从入门到实战》专栏介绍 专栏目录

&#x1f31f;YOLOv5&#xff1a;从入门到实战 | 目录 | 使用教程&#x1f31f; 本专栏涵盖了丰富的YOLOv5算法从入门到实战系列教程&#xff0c;专为学习YOLOv5的同学而设计&#xff0c;堪称全网最详细的教程&#xff01;该专栏从YOLOv5基础知识入门到项目应用实战都提供了详细…

教育培训小程序的设计与功能解析

随着互联网的发展&#xff0c;线上教育逐渐成为一种趋势&#xff0c;越来越多的人开始选择在线学习。而搭建一个适合自己的线上教育小程序&#xff0c;可以为教育机构或个人提供更好的教学和学习体验。在本文中&#xff0c;我们将介绍如何通过一个第三方制作平台来搭建在线教育…