Spring的总结

news2024/11/29 10:56:35

SpringFramework

认识SpringFramework

最首先,我们先要认识Spring和SpringFramework两者之间有什么联系?
 

  • 广义上的 Spring 泛指以 Spring Framework 为基础的 Spring 技术栈。

  • 狭义的 Spring 特指 Spring Framework,通常我们将它称为 Spring 框架。 功能有:

    • 依赖注入(Dependency Injection)、面向切面编程(AOP)、声明式事务管理(TX)等

Spring全家桶的其他框架都是以SpringFramework框架为基础实现的!

可以说其他框架通常扩展了或者构建在 Spring Framework 的核心功能之上,以提供特定领域的解决方案或功能。

开始之前,先介绍一下什么是组件,组件就是一种工具,也就是之后说的bean对象

  • 组件一定是对象

  • 对象不一定是组件

直接进入重头戏!

Spring IoC容器具体接口和实现类

接口

  • BeanFactory接口,提供了一种高级配置机制,能管理任何类型的对象。是SpringIoC容器标准化接口!
  • ApplicationContext是BeanFactory的子接口。是对其的功能扩充:
    1、更容易与AOP功能集成
    2、消息资源处理
    3、特定于应用程序给予此接口实现 

总结:

  •   BeanFactory提供基本功能
  • ApplicationContext就是BeanFactory的扩展,添加了更多企业开发的功能。

Spring框架的配置方式(三种)

  1. XML配置方式:是Spring框架最早的配置方式之一,通过在XML文件中定义Bean及其依赖关系、Bean的作用域等信息,让Spring IoC容器来管理Bean之间的依赖关系。该方式从Spring框架的第一版开始提供支持。

  2. 注解方式:从Spring 2.5版本开始提供支持,可以通过在Bean类上使用注解来代替XML配置文件中的配置信息。通过在Bean类上加上相应的注解(如@Component, @Service, @Autowired等),将Bean注册到Spring IoC容器中,这样Spring IoC容器就可以管理这些Bean之间的依赖关系。

  3. Java配置类方式:从Spring 3.0版本开始提供支持,通过Java类来定义Bean、Bean之间的依赖关系和配置信息,从而代替XML配置文件的方式。Java配置类是一种使用Java编写配置信息的方式,通过@Configuration、@Bean等注解来实现Bean和依赖关系的配置。

现在主流:配置类+注解方式

 

配置的步骤都是一样的,只是越来越简洁了。步骤:

  1. 配置元数据(就是即将加入容器中的类或其他)
  2. 添加入容器(IoC)
  3. 注入(DI)

FactoryBean

FactoryBean 接口是Spring IoC容器实例化逻辑的可插拔性点。

用于配置复杂的Bean对象,可以将创建过程存储在FactoryBean 的getObject方法!

是一种可以配置bean的bean

FactoryBean<T> 接口提供三种方法:

  • T getObject():

    返回此工厂创建的对象的实例。该返回值会被存储到IoC容器!

  • boolean isSingleton():

    如果此 FactoryBean 返回单例,则返回 true ,否则返回 false 。此方法的默认实现返回 true (注意,lombok插件使用,可能影响效果)。

  • Class<?> getObjectType(): 返回 getObject() 方法返回的对象类型,如果事先不知道类型,则返回 null

FactoryBean和BeanFactory区别
​​​​​​​
  • FactoryBean 是 Spring 中一种特殊的 bean,可以在 getObject() 工厂方法自定义的逻辑创建Bean!是一种能够生产其他 Bean 的 Bean。FactoryBean 在容器启动时被创建,而在实际使用时则是通过调用 getObject() 方法来得到其所生产的 Bean。因此,FactoryBean 可以自定义任何所需的初始化逻辑,生产出一些定制化的 bean。一般情况下,整合第三方框架,都是通过定义FactoryBean实现!!!

    (用于创建 bean 的接口,它提供了更加灵活的初始化定制功能)

  • BeanFactory 是 Spring 框架的基础,其作为一个顶级接口定义了容器的基本行为,例如管理 bean 的生命周期、配置文件的加载和解析、bean 的装配和依赖注入等。BeanFactory 接口提供了访问 bean 的方式,例如 getBean() 方法获取指定的 bean 实例。它可以从不同的来源(例如 Mysql 数据库、XML 文件、Java 配置类等)获取 bean 定义,并将其转换为 bean 实例。同时,BeanFactory 还包含很多子类(例如,ApplicationContext 接口)提供了额外的强大功能。

    (用于管理 bean 的框架基础接口,提供了基本的容器功能和 bean 生命周期管理。)

FactoryBean创建实例的步骤
  1. 先创建一个要注入的类

  2. 配置xml文件

  3. 创建FacotyBean类,利用getObject方法返回某个类的bean​​​​​​​

Message类

public class Message {
    private String content;
​
    public Message(String content) {
        this.content = content;
    }
​
    public String getContent() {
        return content;
    }
}
​

创建一个 FactoryBean 接口的实现

import org.springframework.beans.factory.FactoryBean;
​
public class MessageFactoryBean implements FactoryBean<Message> {
​
    private String content;
​
    // 设置消息内容
    public void setContent(String content) {
        this.content = content;
    }
​
    // 返回实例化的 Message 对象
    @Override
    public Message getObject() throws Exception {
        return new Message(content);
    }
​
    // 返回对象的类型
    @Override
    public Class<?> getObjectType() {
        return Message.class;
    }
​
    // 是否是单例
    @Override
    public boolean isSingleton() {
        return true; // 返回 true 表示返回的对象是单例
    }
}

SpringAOP面向切面编程

AOP是对动态代理的简化,内核还是动态代理来实现的。

术语

  1. Aspect(切面): 是横切关注点的模块化组件。它包含了横切逻辑的实现,通常以切面类的形式存在。切面定义了在何处以及如何应用横切逻辑,例如在方法执行前、后或抛出异常时。

  2. Advice(通知): 是切面类中的具体方法,它定义了在程序的哪个时间点应该执行横切逻辑。例如,在目标方法执行前或执行后执行特定操作。

  3. Join Point(连接点): 在程序执行过程中定义的点,如方法的调用、异常处理等。通知可以在连接点上执行。

  4. Pointcut(切点): 定义了连接点的集合,通知会被织入到这些连接点上。通常通过表达式指定切点的位置,允许匹配特定的连接点。

  5. Introduction(引入): 允许向现有类添加新方法或属性。这可以让现有类实现新接口或扩展新行为,而无需修改其代码。

  6. Weaving(织入): 是将切面与应用程序的目标对象结合起来并创建一个通知对象的过程。织入可以发生在编译时、类加载时或运行时。这样,切面的通知会被执行在相应的连接点上。

  • 切面:重复的逻辑代码

  • 通知:切面的执行时间

  • 连接点:方法

  • 4-切入点 pointcut

    定位连接点的方式,或者可以理解成被选中的连接点!

    是一个表达式,比如execution(* com.spring.service.impl..(..))。符合条件的每个方法都是一个具体的连接点。

​​​​​​​

实现步骤

  1. 在maven中添加依赖
  2. 实现核心代码
  3. 声明切面类(@Component,@Aspect)
  4. 配置类和包扫描(扫描切面类所在包)
  5. 测试

Spring声明式事务

介绍

Spring声明式事务就是spring AOP的再续继承。

因为到时候使用的时候还是直接注解使用。然后Spring已经把事务加入到切面中,分成了@Around注解这种的了。

下面是一段Java中的事务代码,Spring中其实也和这个差不多。

Connection conn = ...;
  
try {
    // 开启事务:关闭事务的自动提交
    conn.setAutoCommit(false);
    // 核心操作
    // 业务代码
    // 提交事务
    conn.commit();
  
}catch(Exception e){
  
    // 回滚事务
    conn.rollBack();
  
}finally{
  
    // 释放数据库连接
    conn.close();
  
}

实现步骤

  1. 在配置类上加入@EnableTransactionManagement注解
  2. 在方法或类上加入@Transactional注解就是开启了事务

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

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

相关文章

Linux多值判断利用case...esac判断

利用这个判断&#xff0c;一定要注意格式的运用&#xff0c;非常容易出错 case $1 in #判断变量的值 "hello") #双引号注意&#xff0c;右括号 echo " afdbab " #语句段&#xff0c;没啥说的 ;; #两个分号结束第一个判断&#xff0c…

python图像处理 ——图像分块

python图像处理 ——图像分块 前言一、分块与合并1.读取原始图像2.网格划分&#xff0c;将图像划分为m*n块3.网格合并 二、代码 前言 根据图像尺寸创建一个 ( m 1 ) ( n 1 ) 个均匀的网格顶点坐标&#xff0c;对于图像块来说每个图像块的左上角和右下角可以唯一确定一个图像…

路由过滤路由引入

目录 一、实验拓扑 二、实验需求 三、实验步骤 1、配置IP地址 2、配置RIP和OSPF 3、配置路由引入 4、使用路由过滤&#xff0c;使 R4 无法学到 R1 的业务网段路由&#xff0c;要求使用 prefix-list 进行匹配 5、OSPF 区域中不能出现 RIP 协议报文 一、实验拓扑 二、实…

【Linux】:Linux项目自动化构建工具——make/Makefile || Linux第一个小程序——进度条(简单版本)

在本章开始给大家分享一个图片 希望对你有帮助 在这里插入图片描述 &#x1f3c6;前言 在开始本章之前 我们需要回顾一下上节课的函数的动静态库的优缺点 动态库的优点&#xff1a; 比较节省资源&#xff08;这里说的资源不仅仅是磁盘资源 也包括网络资源 内存资源等等&#…

SpringBoot项目多环境开发

1.yml文件&#xff08;旧&#xff09; 说明&#xff1a;旧的写法。 #应用环境 spring:profiles:active: dev --- #设置环境#生产环境 spring:profiles: pro server:port: 81--- #开发环境 spirng:profiles: dev server:port: 81--- #测试环境 spring:profiles: test server:p…

修改一下第二次课服务枚举等问题

关于AutoRuns 的总结里面&#xff0c;有个错误&#xff0c;Image hijacks 这个准确的描述应该是镜像劫持 和系统运行相关的image&#xff0c;我们通常指的是二进制镜像文件 Image hijacks镜像劫持 简单来说就是&#xff0c;在注册表中&#xff0c;有部分设置&#xff0c;是规…

阿里云二级域名绑定与宝塔Nginx反向代理配置

在阿里或者腾讯...各大域名商买好域名&#xff0c;备案解析好&#xff0c;目标URL&#xff0c;是真正的地址&#xff0c;比如一些端口&#xff0c;后者会自动填写。 注意ssl配置好&#xff0c;这里不要带反代端口

分享一次无线话筒和接收机的配对经历BK9521/9522

最近老婆喜欢上了唱歌。我就需要为她准备歌曲和设备。装了台点歌机&#xff0c;买了软件&#xff0c;用4天的时间下了4T容量的歌曲&#xff0c;听过的没听过的都在里面&#xff0c;真的是太多了。 有了歌曲&#xff0c;就要有唱歌设备了。当我准备买无线话筒的时候&#xff0c…

Javascript知识点详解:正则表达式

目录 RegExp 对象 概述 实例属性 实例方法 RegExp.prototype.test() RegExp.prototype.exec() 字符串的实例方法 String.prototype.match() String.prototype.search() String.prototype.replace() String.prototype.split() 匹配规则 字面量字符和元字符 转义符…

5.数据表基本操作

目录 1.创建数据表 创建数据表的语法格式&#xff1a; 查看当前数据库的表&#xff1a; 主键 1.单字段主键 (1)在定义列的同时指定主键&#xff0c;语法规则如下&#xff1a; (2)在定义完所有列之后指定主键。 2.多字段联合主键 外键&#xff1a; 非空约束&#xff1…

用户态内存映射

内存映射不仅仅是物理内存和虚拟内存之间的映射&#xff0c;还包括将文件中的内容映射到虚拟内存空间。这个时候&#xff0c;访问内存空间就能够访问到文件里面的数据。而仅有物理内存和虚拟内存的映射&#xff0c;是一种特殊情况。 对于堆的申请来讲&#xff0c;mmap 是映射内…

试试流量回放,不用人工写自动化测试case了

大家好&#xff0c;我是洋子&#xff0c;接触过接口自动化测试的同学都知道&#xff0c;我们一般要基于某种自动化测试框架&#xff0c;编写自动化case&#xff0c;编写自动化case的依据来源于接口文档&#xff0c;对照接口文档里面的请求参数进行人工添加接口自动化case 其实…

应用安全四十二:SSO安全

一、什么是SSO SSO是单点登录(Single Sign On)的缩写,是指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消耗,辅助了用户管理,是比较流行的企业业务整合的解决方案之一。 身份验证过程依赖于双方之间的信任关…

大数据毕业设计选题推荐-智慧小区大数据平台-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

2022年ISSCC会议报告分析

Tutorial Fundamentals of Self-Sensing Processor Systems AMD Zen架构的CCD die中有很多传感器检测die的频率、电压、电压和温度 HBM DRAM and 3D Stacked Memory Advances in Digital vs. Analog AI Accelerators Nvidia的Multi-chip架构的DNN加速器 Form1: Compute-in…

Pycharm-community-2021版安装和配置

一、下载Pycharm-community-2021 1.从官网下载pycharm-community Pycharm 版本官网 二、安装PyCharm 1.打开下载完成的安装包&#xff0c;点击Next 2.安装PyCharm到其他位置,点击Next 3.一定把更新PATH变量勾上,可以创建桌面快捷方式&#xff0c;创建关联&#xff0c;最后…

apache-maven-3.6.3 安装配置教程

链接&#xff1a;https://pan.baidu.com/s/1RkMXipnvac9EKcZyUStfGQ?pwdl32m 提取码&#xff1a;l32m 1. 将 maven 压缩包解压至指定文件夹 2. 配置环境变量 &#xff08;1&#xff09;打开此电脑-> 鼠标右键选择属性->点击高级系统设置 &#xff08;2&#xff09;点…

【移远QuecPython】EC800M物联网开发板的硬件PWM和PWM输出BUG

【移远QuecPython】EC800M物联网开发板的硬件PWM和PWM输出BUG 文章目录 导入库初始化PWM开启PWMPWM硬件BUG附录&#xff1a;列表的赋值类型和py打包列表赋值BUG复现代码改进优化总结 py打包 导入库 from misc import PWM_V2或者 from misc import PWM但我觉得PWM_V2好用 初…

嵌入式中如何把C++代码改写成C语言代码

由于C&#xff0b;&#xff0b;解释器比C语言解释器占用的存储空间要大500k左右。为了节省有限的存储空间、降低成本&#xff0c;同时也为了提高效率&#xff0c;将用C&#xff0b;&#xff0b;语言写的源程序用C语言改写是很有必要的。 C&#xff0b;&#xff0b;与C最大的区…

高位片选与低位交叉编址、芯片扩展与多模块存储器、多通道内存

多模块存储器 是一种空间并行技术&#xff0c;利用多个结构完全相同的存储模块的并行工作来增加存储器的吞吐率。根据不同的编址方式&#xff0c;多模块存储器分为连续编址和交叉编址两种结构 连续编址方式&#xff1a;主存地址的高位表示模块号&#xff08;体号&#xff09;…