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

news2024/11/26 22:38:30

 

目录

一、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.coloradmin.cn/o/969336.html

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

相关文章

list【2】模拟实现(含迭代器实现超详解哦)

模拟实现list 引言&#xff08;实现概述&#xff09;list迭代器实现默认成员函数operator* 与 operator->operator 与 operator--operator 与 operator!迭代器实现概览 list主要接口实现默认成员函数构造函数析构函数赋值重载 迭代器容量元素访问数据修改inserterasepush_ba…

数学建模--二维插值函数模型的Python实现

目录 1.算法实现步骤 2.算法核心代码 3.算法效果展示 1.算法实现步骤 #二维插值函数的展示通过Axes3D函数来进行实现 #我们需要绘制出20*20的插值效果和500*500的插值效果,进行比较. 具体步骤如下所示: 1.将x-y分为20*20并且绘制网格图 2.进行20*20的插值计算并且绘制可视化图…

使用SimPowerSystems并网光伏阵列研究(Simulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

9.4.tensorRT高级(4)封装系列-使用pybind11为python开发扩展模块

目录 前言1. pybind112. 补充知识2.1 pybind11 介绍 总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 tensorRT 高级-使用p…

《网络是怎样连接的》(六)

本文主要取材于 《网络是怎样连接的》 第六章。 目录 6.1 服务器概览 6.2 服务器的接收操作 6.3 Web服务器程序解释请求消息并作出响应 6.4 浏览器接收响应消息并显示内容 简述&#xff1a;本文主要内容是解释 网络包到达服务器之后&#xff0c;如何给客户端响应的。 服务…

电商实战项目(java)知识点整理(持续更新)《苍穹外卖》

一、重要知识点精讲 1.1 nginx反向代理 1. nginx反向代理好处&#xff1a; 1. 提高访问速度&#xff08;可以进行缓存&#xff0c;如果访问相同资源可以直接响应数据&#xff09; 2. 可以进行负载均衡&#xff08;如果没有nginx前端只能固定地访问后端某一台服务器&#xf…

Linux系统编程—socket网络编程

Linux系统编程—socket网络编程 理论概念1. TCP与UDP对比端口号作用 socket开发过程服务端1. socket 创建套接字2. bind 绑定IP端口3. listen 监听客户端4. accept 接收客户端5. read / write 数据传输 客户端1. socket 创建套接字2. connect 连接服务3. read / write 数据传输…

合宙Air724UG LuatOS-Air LVGL API控件--下拉框 (Dropdown)

下拉框 (Dropdown) 在显示选项过多时&#xff0c;可以通过下拉框收起多余选项。只为用户展示列表中的一项。 示例代码 -- 回调函数 event_handler function(obj, event)if (event lvgl.EVENT_VALUE_CHANGED) thenprint("Option:", lvgl.dropdown_get_symbol(obj)…

稀疏数组的实现

文章目录 目录 文章目录 前言 一 什么是稀疏数组? 二 稀疏数组怎么存储数据? 三 稀疏数组的实现 总结 前言 大家好,好久不见了,这篇博客是数据结构的第一篇文章,望大家多多支持! 一 什么是稀疏数组? 稀疏数组&#xff08;Sparse Array&#xff09;是一种数据结构&a…

Elastic-job分布式调度系统

一、定时任务实现方式 1、Thread方式 final int timeInterval 1000;Thread thread new Thread(new Runnable() {Overridepublic void run() {while (true){try {//每一秒执行一次Thread.sleep(timeInterval);System.out.println("run...");} catch (InterruptedE…

数据结构和算法(1):开始

算法概述 所谓算法&#xff0c;即特定计算模型下&#xff0c;旨在解决特定问题的指令序列 输入 待处理的信息&#xff08;问题&#xff09; 输出 经处理的信息&#xff08;答案&#xff09; 正确性 的确可以解决指定的问题 确定性 任一算法都可以描述为一个由基本操作组成的序…

SpringBoot核心原理与实践

第一章、SpringBoot简介 1、入门案例 2、官网创建压缩包程序 注意使用的版本pom文件中java --> 1.8、 springboot --> 2.5.0 3、SpringBoot快速启动 运行程序--找引导类 换技术、加技术--加starter 第二章、基础配置 1、配置文件格式 《1、端口号配置》 《2、将目录文…

React原理 - React Hooks

目录 扩展学习资料 React Hooks 编写函数组件 Hooks使命 Hooks解决了什么问题 Hooks原理 useState源码解析 mountState源码解析 Hooks应用 Hooks 实践 倒计时组件 练习 扩展学习资料 名称 链接 React Hooks 官方文档 Introducing Hooks – React useEffect 完整…

PYTHON知识点学习-列表和元组

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由 Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

把一般数据转换成因子数据格式,做单因子、债券对历史数据回测+获取curl命令+垃圾数据转换成标准行情数据(bardata)

下载curl软件&#xff0c;地址&#xff1a; curl for Windows for 64-bit下载好后解压到文件夹&#xff0c;将里面的bin文件添加到环境变量中&#xff0c;bon文件地址为&#xff1a;C:\Users\59980\curl-8.2.1_7-win64-mingw\bin 打开cmd&#xff0c;输入curl --help,出现下…

软考:中级软件设计师:程序语言基础:表达式,标准分类,法律法规,程序语言特点,函数传值传址

软考&#xff1a;中级软件设计师:程序语言基础&#xff1a;表达式 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都…

ssm民宿管理系统源码和论文

ssm民宿管理系统源码和论文110 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&…

SSM整合~

构建并配置项目&#xff1a; 第一步&#xff1a;创建maven项目 第二步&#xff1a;配置pom.xml文件 设置打包方式&#xff1a; <packaging>war</packaging>设置版本号为自定义属性&#xff1a; <properties><!--将版本号通过自定义属性配置--><…

跨站请求伪造(CSRF)攻击与防御原理

跨站请求伪造&#xff08;CSRF&#xff09; 1.1 CSRF原理 1.1.1 基本概念 跨站请求伪造&#xff08;Cross Site Request Forgery&#xff0c;CSRF&#xff09;是一种攻击&#xff0c;它强制浏览器客户端用户在当前对其进行身份验证后的Web 应用程序上执行非本意操作的攻击&a…

差异化竞争阵地的所在【周技术进阶】-从BS 项目C#最基础截取字符串方法开始

效果 代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleAppNumberOneHelloWorld {class Program{static void Main(string[] args){Console.WriteLine("hello world&#xf…