Spring笔记

news2024/12/24 21:00:24

文章目录

  • 1、什么是Spring?
  • 2、如何创建Spring
  • 3、Spring简单的读和取操作
    • 1.直接在spring-config.xml里面放置对象
    • 2.通过配置扫描路径和添加注解的方式添加Bean对象
    • 3.为什么需要五个类注解
    • 4.从spring中简单读取 Bean对象
    • 5.@Resource和@Autowired的异同

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中出现了多个未重命名的对象时,再去注入对象就会出错
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Transformer结构细节

一、结构 Transformer 从大的看由 编码器输入、编码器、解码器、解码器输入和解码器输出构成。 编码器中包含了词嵌入信息编码、位置编码、多头注意力、Add&Norm层以及一个全连接层; 解码器中比编码器多了掩码的多头注意力层。 二、模块 2.1 Input Embeddi…

canvas学习之华丽小球滚动电子时钟

教程来自 4-3 华丽的小球滚动效果 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>华丽小球滚动时钟…

【AVL树的模拟实现】

1 AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了一种解决…

人工智能基础部分14-蒙特卡洛方法在人工智能中的应用及其Python实现

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能基础部分14-蒙特卡洛方法在人工智能中的应用及其Python实现&#xff0c;在人工智能领域&#xff0c;蒙特卡洛方法&#xff08;Monte Carlo Method, MCM&#xff09;被广泛应用于各种问题的求解。本文首先将…

wvp-GB28181-pro录像功能开发环境搭建、配置、使用

开发环境、调试环境搭建 开发wvp平台搭建 离线安装脚本&#xff1a;https://gitcode.net/zenglg/ubuntu_wvp_online_install.git 下载离线安装脚本&#xff0c;完成wvp平台的部署 开发环境要求 操作系统&#xff1a;包管理工具是apt ky10桌面版uos桌面版deepin桌面版ubuntu桌面…

ArmDot.NET Crack

ArmDot.NET Crack ArmDot是一个.NET加密工具&#xff0c;用于保护使用.NET编写的程序。 企业需要保护他们的知识产权&#xff0c;包括他们的算法、产品和使用的资源的源代码。 然而&#xff0c;.NET编译器会生成一个通用的可访问代码。代码中嵌入的资源很容易访问&#xff0c;并…

RocketMQ不同的类型消息

目录 普通消息 可靠同步发送 可靠异步发送 单向发送 三种发送方式的对比 顺序消息 事物消息 两个概念 事务消息发送步骤 事务消息回查步骤 消息消费要注意的细节 RocketMQ支持两种消息模式: 普通消息 RocketMQ提供三种方式来发送普通消息&#xff1a;可靠同步发送、…

剑指Offer题集(力扣)

文章目录 剑指Offer题集&#xff08;[力扣题单](https://leetcode.cn/problemset/all/?listIdlcof&page1)&#xff09;[剑指 Offer 03. 数组中重复的数字](https://leetcode.cn/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/)[剑指 Offer 04. 二维数组中的查找](https:…

SSM框架练习一(登录后关联数据表的业务模型)

需要实现的整体功能&#xff1a; 登录反馈信息列表展示查询反馈信息发表反馈 1.数据库设计 创建数据库 创建表结构及其约束 添加测试数据 工具&#xff1a;PHP、Navicat create table tab_user(id int primary key auto_increment,uname varchar(30) not null,pwd varc…

Weblogic XMLDecoder 反序列化漏洞(CVE-2017-10271复现)

文章目录 前言影响版本环境搭建漏洞复现深度利用 前言 CVE-2017-10271漏洞产生的原因大致是Weblogic的WLS Security组件对外提供webservice服务&#xff0c;其中使用了XMLDecoder来解析用户传入的XML数据&#xff0c;在解析的过程中出现反序列化漏洞&#xff0c;导致可执行任意…

从搬砖工到架构师,Java全栈学习路线总结

&#x1f307;文章目录 前言一、前置知识二、 Web前端基础示例&#xff1a;1.文本域2.密码字段 三、后端基础一. Java基础二. 数据库技术三. Web开发技术四. 框架技术五. 服务器部署 四、其他技术五、全栈开发六、综合实践七、学习教程一、前端开发二、后端开发三、数据库开发四…

springboot+jsp乡村中小学校园网站建设

随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;乡村小学校园网当然也不能排除在外&#xff0c;从校园概况、学校风采、招生信息的统计和分析&#xff0c;在过程中会产生大量的…

Maven依赖原则及如何解决Maven依赖冲突

前言 在大数据应用中&#xff0c;现在发现依赖关系非常复杂&#xff0c;在上线之前很长测试&#xff0c;前一段时间在部署udf 出现了导致生产Hiveserver2 宕机问题&#xff0c;出现严重事故。现在就咨询研究一下。Maven虽然已经诞生多年&#xff0c;但仍然是当前最流行的Java系…

Arrays:点燃你的数组操作技巧的隐秘武器。

前言 数组在 Java 中是一种常用的数据结构&#xff0c;用于存储和操作大量数据。但是在处理数组中的数据&#xff0c;可能会变得复杂和繁琐。Arrays 是我们在处理数组时的一把利器。它提供了丰富的方法和功能&#xff0c;使得数组操作变得更加简单、高效和可靠。无论是排序、搜…

【c语言】字符串类型转换 | itoa函数的使用

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ …

MySQL innodb介绍

InnoDB引擎的优点是支持兼容ACID的事务&#xff0c;以及参数完整性&#xff08;即对外键的支持&#xff09;。 Oracle公司2005年10月收购了Innovase&#xff1b;Innobase采用双认证授权。它使用GNU发行&#xff0c;也允许其他想将InnoDB结合到商业软件的团体好的授权 mysql5.…

Java 动态原理详解

Java 动态代理是一种非常重要的编程技术&#xff0c;它在很多场景下都有着广泛的应用。本文将介绍 Java 动态代理的实现原理&#xff0c;并附上相应的源码&#xff0c;以帮助读者更好地理解和应用这一技术。 一、什么是 Java 动态代理&#xff1f; Java 动态代理是一种在运行时…

【并发基础】Happens-Before模型详解

目录 一、Happens-Before模型简介 二、组成Happens-Before模型的八种规则 2.1 程序顺序规则&#xff08;as-if-serial语义&#xff09; 2.2 传递性规则 2.3 volatile变量规则 2.4 监视器锁规则 2.5 start规则 2.6 Join规则 一、Happens-Before模型简介 除了显示引用vo…

双目测距--5 双目相机 联合 YOLOv8

目录 效果&#xff1a; 1、立体矫正不改变图像尺寸 2、视差图尺寸与原图尺寸一致 3、视差图、深度信息图 4、几个重要的函数 createTracker() 5、代码 main.cpp utils.cpp 效果&#xff1a; 1、立体矫正不改变图像尺寸 左右相机图像立体矫正后&#xff0c;图像尺寸为变化…

freeRTOS中使用看门狗的一点思考

关于看门狗想必各位嵌入式软件开发的朋友应该都不会陌生的。在嵌入式软件开发中&#xff0c;看门狗常被用于监测cpu的程序是否正常在运行&#xff0c;如果cpu程序运行异常会由看门狗在达到设定的阈值时触发复位&#xff0c;从而让整个cpu复位重新开始运行。 看门狗的本质是一个…