Spring笔记

2023-11-11

1、什么是Spring?

Spring是一个包含了众多工具方法IOC容器。


1.什么是容器?
放东西的就是容器;
List/Map -> 数据存储容器
Tomcat -> Web 容器
因此Spring也是一个容器,是一个IOC控制反转的容器

2.什么是IOC?

IOC全称Inversion of control,即控制反转
Spring 是⼀个 IoC(控制反转)容器,重点还在“容器”⼆字上,那么它就具备两个最基础的功能:
1、将对象存⼊到容器;2、从容器中取出对象

所以Spring 最核⼼的功能,就是将对象存⼊到 Spring 中,再从 Spring 中获取对象的过程

3.什么是DI
提起IOC,那么DI也是必不可少的概念
DI 是 Dependency Injection 的缩写,翻译成中⽂是“依赖注⼊”的意思
所谓依赖注⼊,就是由 IoC 容器在运⾏期间,动态地将某种依赖关系注⼊到对象之中。所以,依赖注⼊(DI)和控制反转(IoC)是从不同的⻆度的描述的同⼀件事情,就是指通过引⼊ IoC 容器,利⽤依赖关系注⼊的⽅式,实现对象之间的解耦。
IoC 是“⽬标”也是⼀种思想,⽽⽬标和思想只是⼀种指导原则,最终还是要有可⾏的落地⽅案,⽽ DI就属于具体的实现

比如,今天天气好,我要去种地,我想去种地是一种思想,就是IOC;但是我动身去仓库拿工具种地就是一种具体实现方式,就是DI;

2、如何创建Spring

创建一个Spring项目主要有三个步骤:

1.创建Maven项目
2.添加Spring依赖
3.创建启动类

1.创建Maven项目
在这里插入图片描述
2.将Spring框架加入到项目中
到Maven中央仓库中区找
在这里插入图片描述
3.创建启动类
在这里插入图片描述

这样一份Spring就创建好了


注意:一定要配置国内源,并且路径中尽量不要出现中文(我的出现了,不推荐)
在这里插入图片描述


3、Spring简单的读和取操作

Spring存Bean对象的方式:

1.直接在spring-config.xml里面放置对象

在这里插入图片描述

在这里插入图片描述


2.通过配置扫描路径和添加注解的方式添加Bean对象

添加Bean对象可以通过两种注解
1.类注解:@Controller、@Service、@Repository、@Component、@Configuration
2.方法注解:@Bean


1.使用类注解
在这里插入图片描述
在这里插入图片描述
注意:此处我们创建的User类,所以通过getBean来寻找对象的时候前面一个参数是id,默认是类首字母小写,第二个参数是类对象。
问题一:如果我们的类名第一个字母也是小写呢?
如果类名的首字母是小写,那么和默认方式是一样的,首字母小写即可

问题二:如果我们的类名首字母和第二个字母都是大写呢?
使用原类名即可

结论:当使用五大类注解时,默认情况下获取Bean对象,只需要将类名首字母小写即可;然而当Bean对象首字母和第二个字母都是大写时,此时需要原类名才能正确获取到Bean对象

在这里插入图片描述


2.使用Bean方法注解:将返回的对象存储到spring中
在这里插入图片描述


3.为什么需要五个类注解

1.通过类注解可以了解到当前类的用途
2.不同的类注解有不同的地方

五大类注解用途(重点) :
1. @Controller (控制器) :归属于业务逻辑层,用来控制用户的行为,它用来检查用户参数的有效性。
2. @Service (服务) :归属于服务层,调用持久化类实现相应的功能。[不直接和数据库交互的,它类似于控制中心]
3. @Repository (仓库) :归属于持久层,是直接和数据库进行交互的。通常每一个表都会对应一个@Repository。
4. @Configuration (配置) :归属于配置层,是用来配置当前项目的一些信息。
5. @Component (组件) :归属于公共工具类,提供某些公共方法。

在这里插入图片描述


4.从spring中简单读取 Bean对象

有三种方式往spring中注入对象:

1.属性注入
2.setter注入
3.构造方法注入

1.属性注入
在这里插入图片描述
优点:实现简单,(迄今为止应用最为广泛的注入方式)
缺点:1.不能注入不可变对象
2.只适用于IOC容器
3.更容易违背单一设计原则(针对对象是类)


2.setter注入
在这里插入图片描述
缺点:1.不能注入不可变对象
2.注入对象可被修改

优点:更符合单一设计原则。针对对象方法级别


3.构造方法注入
在这里插入图片描述
优点:1.可以注入不可变对象
2.注入对象不会被修改
3.注入的对象会被完全初始化

缺点:书写繁杂,没有属性注入简单


5.@Resource和@Autowired的异同

相同点:

都是用来实现属性注入的

不同点:

1.功能支持不同:@Autowired 支持属性注入、setter注入、构造方法注入;但是@Resource只支持属性、setter注入

2.出身不同:@Autowired来自于spring框架,@Resource来自JDK

3.参数支持不同:@Autowired只支持required参数,@Resource支持更多的参数设置

注意:当Service中出现了多个未重命名的对象时,再去注入对象就会出错
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring笔记 的相关文章

  • Windows 上的虚假唤醒。是否可以?

    我最近学习了 虚假唤醒 有人说这个问题只可能发生在某些类型的 Linux PC 上 我用的是窗户 我为虚假唤醒编写了测试 我得到的结果是这是可能的 但我想向您展示这个测试 也许我在某个地方犯了错误 我的初始变体 import java ut
  • 定制法国号码格式

    我尝试为美国国家 地区使用自定义数字格式 到目前为止效果很好 Not something I want NumberFormat numberFormat0 NumberFormat getNumberInstance Locale US
  • JLabel.setText() 中的换行符

    使用 JLabel setText 时如何插入换行符 我尝试使用 Html 但似乎可以使其适用于 setText 仅适用于 jLabel 的初始声明 最初声明 jlabel 时的方法是 label new JLabel Hello Worl
  • 将 Spring Boot 应用程序部署到 Heroku 失败并显示“无效标志:--release -> [帮助 1]”

    当我尝试将代码部署到 Heroku 时 通过git push heroku master 我收到 Maven 错误 remote ERROR Failed to execute goal org apache maven plugins m
  • 如何在Spring Security SAML示例中配置IDP元数据和SP元数据?

    我想处理 Spring Security SAML 为此 我开始探索Spring安全SAML http docs spring io spring security saml docs 1 0 x reference html chapte
  • Android - Java - 发送 facebook 聊天消息的意图(facebook 禁用 xmpp)

    Facebook 已弃用 xmpp API 有没有办法打开意图 或将数据传递到fb 以在Android设备上发送聊天消息 设备上安装的 Facebook 和 Messenger 应用 谢谢 您需要将 uri 传递给意图 这里10000572
  • 如何用java对jpg进行像素化?

    我正在尝试使用 Java 6 对 JPEG 进行像素化 但运气不佳 它需要使用 Java 而不是像 Photoshop 这样的图像处理程序 并且它需要看起来像老派 像这样 有谁能够帮助我 使用java awt image javadoc h
  • WSDL 表示中的枚举类型

    WSDL 表示如下
  • 使用 javax.mail 和 CentOS 的邮件服务器

    我有一个 Java 程序 安装在一台旧的 Ubuntu 机器上 并使用 javax mail 发送邮件 然而 那台机器宕机了 我现在在新的 CentOS 机器上运行相同的 Java 应用程序 但是 当我尝试使用 mail smtp host
  • 从 Java 调用 Python 代码时出现问题(不使用 jython)

    我发现这是从 java 运行 使用 exec 方法 python 脚本的方法之一 我在 python 文件中有一个简单的打印语句 但是 我的程序在运行时什么也没做 它既不打印Python文件中编写的语句 也不抛出异常 程序什么都不做就终止了
  • SOAP Web 服务中的用户身份验证

    我提出了一个关于JAX WS 身份验证和授权 如何 https stackoverflow com questions 5314782 jax ws authentication and authorization how to 讨论了安全
  • Java反序列化中避免重复对象

    我有两个列表 list1 和 list2 其中包含对某些对象的引用 其中某些列表条目可能指向同一对象 然后 由于各种原因 我将这些列表序列化为两个单独的文件 最后 当我反序列化列表时 我想确保我不会重新创建超出需要的对象 换句话说 List
  • Java 中 LINQ 的等价物是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Java 中 LINQ 的等价物是什么 没有什么比 LINQ for Java 更好的了 Edit 现在
  • 在Java中一个接一个地播放WAV文件

    我正在尝试玩几个WAV http en wikipedia org wiki WAV文件一个接一个 我尝试了这个方法 for String file audioFiles new AePlayWave file start 但这会同时播放它
  • JFreeChart MeterPlot

    我目前正在用java做Agent项目 在某些时候 我需要显示一个仪表 例如 电池电量 我的程序中有 5 个代理 每个代理都会创建自己的带有名称的仪表图 但不知何故他们没有更新数据集 或者他们正在更新数据集 只是它没有显示在仪表图上 任何想法
  • ObservableList 不更新 ArrayList

    对于学校作业 我们正在使用 JavaFX 中的 ObservableList 对象 对吗 我已经为此工作了一天多了 但无法弄清楚 老师只告诉我们 谷歌一下 所以这也没有帮助 基本上 我们正在开发一个基本的管理应用程序来跟踪人们及其家人 人们
  • 在java中设置Process对象的安全性

    有人可以告诉我如何限制通过进程对象访问系统属性吗 如果我通过进程对象运行以下代码 我可以抛出安全异常吗 System getProperty user home 请告诉我如何为流程对象配置证券 在ProcessBuilder类文档中 环境方
  • 何时以及为何使用缓冲输入和输出流? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我读到这些是为了减少磁盘 网络调用开销而使用的 这在写操作的情况下似乎很好 但是进行缓冲读取有什么好处呢 如果您按字节读取文件 则每次都会进
  • Spring Data JPA 和 Exists 查询

    我正在使用 Spring Data JPA 使用 Hibernate 作为我的 JPA 提供程序 并想要定义一个exists附加 HQL 查询的方法 public interface MyEntityRepository extends C
  • Spring JMS开始根据请求监听jms队列

    Spring提供 JMSListener用于监听来自特定队列的消息的注释 还有一个替代方案实施JmsListenerConfigurer http docs spring io spring docs current spring fram

随机推荐

  • java基础之日期与字符串的任意转换

    目录 前言 日期转字符串 1 创建日期对象 2 创建字符串的格式化模版 字符串转日期 前言 本文主要讲述如何将日期类型转化为字符串类型 以及将字符串类型转化为日期类型 一看就懂 一学就会 日期转字符串 1 创建日期对象 LocalDate
  • 2.7时间管理------------2.7.1基本概念

    1 物理系统 被仿真的实际或想象的系统 物理系统组成了真实的世界 2 仿真系统 就是对物理系统的模拟 是个虚拟世界 3 物理时间 真实世界中的自然时间 4 仿真时间 仿真世界里的时间 也称逻辑时间 5 墙上时钟时间 仿真世界里的参考时间 它
  • 数据结构:常见算法的时间复杂度汇总

    目录 顺序表 链表 二叉树 图 V是顶点个数 E是边的条数 1 存储空间 2 BFS和DFS的时间复杂度 3 最小生成树时间复杂度 4 最短路径时间复杂度 查找的平均查找长度 ASL 排序 顺序表 算法操作 时间复杂度 空间复杂度 描述 插
  • QT Creator的style sheet的几种用法(QT Creator)(StyleSheet)(样式)(QT4.7)(用法)

    摘要 QT Create中 对button或者window等部件设置背景 颜色 透明等样式时 需要用到style sheet 可以直接在代码里写 也可以在ui设计师里通过右键change style sheet的方法来设置 本人是使用的后面
  • 一种基于遗传算法与神经网络算法(GA-BP)的新冠肺炎模型预测-含Matlab代码

    目录 一 引言 二 新冠肺炎模型构建 三 遗传算法反向传播 GA BP 神经网络设计 3 1 GA BP 神经网络构建 3 2 BP神经网络训练 3 3 基于遗传算法的新冠感染人数峰值预测 四 结论 五 Matlab代码获取 一 引言 针对
  • jackson中自定义处理序列化和反序列化

    http jackyrong iteye com blog 2005323 对于一直用gson的人来说 如果单独用jackson 真是麻烦了 但还是得小结下了 先来看下如何自定义把某个对象序列化为json 先是对象 Java代码 publi
  • Flink实时计算性能分析

    本文从数据传输和数据可靠性的角度出发 对比测试了Storm与Flink在流处理上的性能 并对测试结果进行分析 给出在使用Flink时提高性能的建议 Apache Storm Apache Spark和Apache Flink都是开源社区中非
  • 19_SpringBoot拓展注解@SpringBootApplication和@Configuration

    文章目录 Spring Boot拓展注解 SpringBootApplication和 Configuration 0x01 SpringBootApplication SpringBootConfiguration EnableAutoC
  • 第十七节 多线程(二)购票经典案例+单例设计模式

    1 多线程案例 这是一个经典的多线程案例 火车票售票案例 需求 假设一共100张火车票 多个窗口去售卖 想一想 在现实中是如果买票的 需要注意哪些事项 1 1 窗口售票 1 1 1 方式一 继承 Thread 类 第一种继承Thread方式
  • C# LINQ的基础使用方法

    关键字 from in where select orderby descending 例子 Linq的简单运用 1 用Linq查询集合中所有符合条件的内容 表达式写法 var result from temp 临时变量 in myList
  • 技术调研报告

    如何做好技术调研 了解需求 首先你肯定要足够了解需求 然后才能确定一个技术调研方向 一定要确定好要求 准确分析出需要准备的技术点 再进入下一步 需要技术调研的场景包括但不限于以下三个方面 新技术 资料较少 社区不完备 足够成熟 但不确定细节
  • 博客园Markdown编辑器代码高亮失效(官方已修复)

    刚来博客园写文章 插入代码功能总是会失效 Markdown编辑器 找了半天原因 多数情况是因为代码中有空行 正确的插入方法 php echo 不要有空行 失效的插入方法 php echo 第一行空的 使用 TinyMCE编辑器则没有这个空行
  • java计算二叉树的节点最小值_求二叉树根节点到叶子节点路径和的最小值:遍历(递归+非递归)...

    昨晚中兴笔试题 第一题是给定二叉树 每个节点的数据结构是 value left right 比较根节点到各个叶子节点路径和的大小 输出路径和的最小值 补充 用ArrayList可以存储 以前没做过关于树的题 所以没想到如何处理各个节点的左右
  • Ubuntu 下安装类似记事本的工具Geany

    Geany同样也是一个类似Komode Edit的编辑器 下载方式 1 Ubuntu软件中心中搜索Geany安装 2 我已第二种方式为例 输入ctrl alt t的组合快捷键 在终端中输入 sudo apt get install gean
  • Docker compose

    文章目录 Docker compose 1 介绍 2 为什么要 Docker Compose 3 Docker Compose 文件 docker compose yml image command entrypoint environme
  • Spring-statemachine实现订单状态机

    状态机简介 先从状态机的定义入手 StateMachine 其中 StateMachine 状态机模型 state S 状态 一般定义为一个枚举类 如创建 待风控审核 待支付等状态 event E 事件 同样定义成一个枚举类 如订单创建 订
  • 关键字static、Const、Volatile的作用是什么

    关键字static的作用是什么 在C语言中 关键字static有三个明显的作用 1 在函数体 一个被声明为静态的变量在这一函数被调用结束后不释放其存储空间 定义为static的局部变量的存储在全局区 静态区 而一般的局部变量存储在栈中 2
  • html 增加等待状态,html5--等待加载效果

    等待载入 你的浏览器不支持canvas var wait document getElementById wait getContext 2d wait fillRect 0 0 100 100 translate 方法重新映射画布上的 0
  • Qt通过Doc模式读取XML并设计一个增删改查方便的操作类

    前言 如果对开源库TinyXml有兴趣的可以去看看这篇文章 C 使用TinyXml 开源库 读取 XMl文件 目录 前言 DOC 文档对象模型 QtXML基本结构 操作XML 部署环境 添加信息头 读取XML文件 添加根节点 添加一个没有属
  • Spring笔记

    文章目录 1 什么是Spring 2 如何创建Spring 3 Spring简单的读和取操作 1 直接在spring config xml里面放置对象 2 通过配置扫描路径和添加注解的方式添加Bean对象 3 为什么需要五个类注解 4 从s