当前位置: 首页 > 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锁定 …...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...