当前位置: 首页 > news >正文

Spring相关知识点

概述

分层的轻量级的全栈开源框架
展示层SprigMVC
持久层 Spring JDBCTemplate 
业务层事务管理
注:
轻量级:API简单
全栈:各层都有相应解决方案 
在Spring的体系结构中,由上而下,逐层依赖
Spring相当于是一个粘合剂,将各层的bean配置到IOC容器中

优点

1.低侵入式设计,代码的污染极低 
2. 独立于各种服务器 write once runanyway
3 ioc容器提高组件的解耦
4.Spring提高了与第三方框架的良好整合。简化底层数据库的访问
5.并不强制应用程序完全依赖Spring
注:
污染极低:简单来说就是去除框架后,代码的改动大小,去除框架后,只需要修改一些配置信息
补充(了解):
aop编程的支持:不容易用oop实现的功能,可以用aop轻松实现
声明式事务的支持,传统;采用编码的方式声明事务,声明式可以一次性声明许多事务
方便程序的测试:可以用非容器依赖的方式进行几乎所有的测试工作

 传统开发模式的弊端

1.对象之间耦合度高

当用到一个对象中的方法时,通常会在一个对象内部去new另一个对象的实例,然后调用其方法

解决:对象与对象之间不再直接打交道,需要对象时,由容器提供

Spring提供了一个IOC容器,根据配置文件中的信息,进行对象的创建和相关依赖的注入

IOC(Inversion of Controller) 

主动创建对象,变为由IOC容器为调用者的成员进行赋值。
1.谁控制、控制了什么 
当某个java对象需要调用另一个Java对象的方法时,传统模式下会有两种做法。
一:调用者【主动】创建被依赖依赖,然后再调用被依赖对象的方法
二: 简单工厂模式,调用者首先找到被依赖对象的工厂,然后主动通过工厂获取被依赖对象,最后调用被依赖对象的方法
 2.何为反转
调用者主动创建依赖对象改为被动接受Spring容器为调用者的成员赋值 
总结:由调用者主动控制对象的创建变为容器控制对象的创建,由主动创建变为被动接受

DI(Dependency Injection)

拿到对象的属性,已经被注好相关值,直接使用即可
方式:
1.值注入:通过成员变量的setter方法进行注入
2.构造方式注入 
区别:通过成员变量的setter方法进行注入  简单易理解使用较多,构造方式注入可以决定依赖关系的注入顺序   所有的依赖关系全部在构造器内设定、无需担心后续代码对依赖关系产生破坏。
总结:设值注入为主,构造注入为辅 依赖关系无变化的注入,构造注入为主,其它值注入

Bean

IOC容器创建管理的Java对象
作用域:
1. singleton 单例模式 bean 在整个容器中仅存在一个实例
2.prototype  每次getBean时都将产生一个实例
3.request  一次请求将产生一个新对象
4.seeion域
5.global session 每个全局的session对应一个Bean实例
注:3、4、5仅在web应用程序中IOC容器创建管理的Java对象

获取方式:

ApplicationContext中获取

可以通过id或者类型进行获取

相关实现类:

ClassPathXmlApplicaionContext:从resources目录根据配置文件创建Spring容器

FileSystemXmlApplicationContext:根据文件的绝对路径创建Spring容器

AnnotationConfigApplciaitonContext(xxx.class)

WebApplicationContextUtils:导入Spring-web后,获取容器的API为此

数据源(连接池)

数据源是提高程序性能出现的
事先实例化数据源,初始化部分连接资源
使用连接资源时从数据源获取,使用完毕后将连接资源归还给数据源
常用数据源Druid c3p0 

重点配置

<bean>标签

        id属性:在容器中Bean实例的唯一标识,不允许重复

        class属性:要实例化的Bean的全限定名

        scope属性: Bean的作用范围,常用的是Singleton(默认)和prototype

       <propety>标签:属性注入

               name属性:属性名称

               value属性:注入的普通属性值

               ref属性:注入的对象引用值

              <list> 标签

              <map>标签

              <properties>标签

       <constructor-arg>标签

原始注解

主要用来替换Bean的相关配置
@Componnet 用在类上实例化bean
@Controller  用在web层类上用来实例化bean
@Service 使用在service层类上实例化bean
@Respository 使用在dao层类上实例化bean
@Autowired 使用在字段上根据类型进行依赖注入
@Qualifier 结合@AutoWired根据名称进行依赖注入
@Resource 相当于@AutoWired +@Qualifier 根据名称进行依赖注入, 需加name
@Value 注入普通属性
@Scope 标注bean的作用范围
@PostConstrust 使用在方法上,标注该方法是bean的初始化方法
@PreDestroy 使用在方法上,标注该方法是bean的销毁方法
使用原始注解,需要用到包扫描
<context:component-scan base-package="edu.shu.spring.domain"/>
注:可以同时使用到两个包扫描

新注解 

以上注解不能替代所有的Spring配置
1.第三方bean
2.引入的其它文件
3.零配置中需要用到的包扫描
@Configuration 用在类上,标志该类是一个Spring的配置类
@ComoponentSan (包扫描路径) 用在类上
@import (xxx.class)用来加载分的配置类,  里面其实是一个数组

出错点

getBean方法调用异常

Spring中提供了有参构造,不提供默认的无参构造,会导致getBean时异常

原因:getBean方法内部通过反射的方式创建对象

配置文件

开发阶段和运行阶段一样,项目发布后,内部可以动态更改

相关文章:

Spring相关知识点

概述 分层的轻量级的全栈开源框架 展示层SprigMVC 持久层 Spring JDBCTemplate 业务层事务管理 注&#xff1a; 轻量级&#xff1a;API简单 全栈&#xff1a;各层都有相应解决方案 在Spring的体系结构中&#xff0c;由上而下&#xff0c;逐层依赖 Spring相当于是一个粘合剂&…...

Nginx专题--反向代理(未完成)

反向代理   正向代理&#xff1a;如果把局域网外的 Internet 想象成一个巨大的资源库&#xff0c;则局域网中的客户端要访问 Internet&#xff0c;则需要通过代理服务器来访问&#xff0c;这种代理服务就称为正向代理。 反向代理&#xff1a;其实客户端对代理是无感知的&…...

什么是搜索引擎?2023 年搜索引擎如何运作?

目录 什么是搜索引擎&#xff1f;搜索引擎的原理什么是搜索引擎爬取&#xff1f;什么是搜索引擎索引&#xff1f;什么是搜索引擎检索?什么是搜索引擎排序&#xff1f; 搜索引擎的目的是什么&#xff1f;搜索引擎如何赚钱&#xff1f;搜索引擎如何建立索引?网页抓取文本处理建…...

Spring系列一:spring的安装与使用

文章目录 &#x1f49e; 官方资料&#x1f34a;Spring5下载&#x1f34a;文档介绍 &#x1f49e;Spring5&#x1f34a;内容介绍&#x1f34a;重要概念 &#x1f49e;快速入门&#x1f34a;Spring操作演示&#x1f34a;类加载路径&#x1f34a;Debug配置&#x1f34a;Spring容器…...

Ubuntu--科研工具系列

翻译系列 pot-desktop github链接: https://github.com/pot-app/pot-desktop 下载deb Releases pot-app/pot-desktop GitHub 安装过程 在下载好的deb目录下打开终端(自动安装依赖) sudo apt install "XXX.deb" &#xff08;后面可以直接托文件到终端&#…...

【压测指南|压力测试核心性能指标及行业标准】

文章目录 压力测试核心性能指标及行业标准指标1&#xff1a;响应时间指标2&#xff1a;吞吐量&#xff08;TPS)指标3&#xff1a;失败率总结&#xff1a; 压力测试核心性能指标及行业标准 在做压力测试时&#xff0c;新手测试人员常常在看报告时倍感压力&#xff1a;这么多性能…...

spark-submit --files

一、原理 spark-submit --files通常用来加载外部资源文件&#xff0c;在driver和executor进程中进行访问 –files和–jars基本相同 二、使用步骤 2.1 添加文件 spark-submit --files file_paths 其中file_paths可为多种方式&#xff1a;file: | hdfs:// | http:// | ftp:// |…...

应该选云服务器还是物理服务器

应该选云服务器还是物理服务器 一、为什么需要云服务器或独立服务器取代共享主机 在最早之前&#xff0c;大多数的网站都是共享主机开始的&#xff0c;这里也包含了云虚拟机。这一类的站点还有其他站点都会共同托管在同一台服务器上。但是这种共享机只适用于小的网站&#xff…...

【iOS】动态链接器dyld

参考&#xff1a;认识 dyld &#xff1a;动态链接器 dyld简介 dyld&#xff08;Dynamic Linker&#xff09;是 macOS 和 iOS 系统中的动态链接器&#xff0c;它是负责在运行时加载和链接动态共享库&#xff08;dylib&#xff09;或可执行文件的组件。在 macOS 系统中&#xf…...

RocketMQ集成Springboot --Chapter1

RocketMQ集成Springboot 三种消息发送方式 生产者 引入依赖 <!--⽗⼯程--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.2.RELEASE</version><…...

【Unity3D日常开发】Unity3D中比较string字符串的常用方法

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 字符串string的比较有很多方法&#xff0c;比如&#xff1a; …...

vue3+ts+element-plus 之使用node.js对接mysql进行表格数据展示

vue3tselement-plus axiosnode.jsmysql开发管理系统之表格展示 ✏️ 1. 新建一个node项目* 初始化node* 安装可能用到的依赖* 配置文件目录* 添加路由router1. 添加router.js文件&#xff0c;添加一个test目录2. 修改app.js ,引入router&#x1f4d2; 3. 启动并在浏览器打开 * …...

华为eNSP:isis配置跨区域路由

一、拓扑图 二、路由器的配置 1、配置接口IP AR1: <Huawei>system-view [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.1 24 [Huawei-GigabitEthernet0/0/0]q AR2: [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.2 24 [Huawe…...

IUPAC和SMILES的相互转换

这种方法只能解决非常简单的转换&#xff0c;更难的SMILES之间应该是无法直接转换&#xff0c;我可能很多人都使用神经网络解决 &#xff0c;暂时还没仔细看&#xff0c;后面再仔细看吧... 简单的转换&#xff1a; import urllib.error import urllib.parse import urllib.re…...

逻辑回归概述

逻辑回归介绍 1. 逻辑回归的应用场景 逻辑回归(Logistic Regression)是机器学习中的 一种分类模型 ,逻辑回归是一种分类算法,虽然名字中带有回归。由于算法的简单和高效,在实际中应用非常广泛 广告点击率是否为垃圾邮件是否患病信用卡账单是否会违约 逻辑回归就是解决二…...

React 框架下自己写一个braft编辑器,然后将编辑器内容展示在网页端

1.首先自己写一个编辑器 输入文字&#xff1b; 支持选择表情&#xff1b; 可添加小程序链接&#xff1b;可添加网页链接&#xff1b;并且可以编辑删除&#xff1b;效果如下 2.输入完毕后&#xff0c;点击文本输入框保存&#xff0c;将便携式内容回显&#xff0c; 渲染时…...

基于DNN深度学习网络的OFDM+QPSK信号检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ............................................................................. Transmitt…...

学生管理系统-05封装选项卡

一、选项卡的添加 1、在router/index.js修改之前的动态添加二级路由的代码 router.addRoute("homeName",{ path:routeObj.path, component:()=>import(`@/views${routeObj.permission}.vue`), meta:{ name:routeObj.title …...

关于一些C++、Qt、Python方面的术语

杂鱼之前纯粹用python没细致理解过的术语整理一下&#xff0c;常看常新&#xff08; 定义 (Definition)&#xff1a; 定义是指给一个实体分配内存空间&#xff0c;以便在程序中使用。在C和Python中&#xff0c;这个实体可以是变量、函数或类。在C中&#xff0c;定义通常是在声…...

k8s中强制删除pv

K8s 集群内有一个已经不再使用的 PV&#xff0c;虽然已经删除了与其关联的 Pod 及 PVC&#xff0c;并对其执行了删除命令&#xff0c;但仍无法正常删除&#xff0c;一直处于 Terminating 状态&#xff1a; 解决办法&#xff1a; 1. 获取pv信息 kubectl get pv 2. 解除pv锁定 …...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...