Java框架学习--Spring
1.Spring概念【托管很多对象的框架】
一个包含了众多工具方法的IoC容器。
1.1 什么是容器?
容器是用来容纳各种物品的(基本)装置。--来自百度百科
之前常见的容器有:
List/Map-》数据存储容器
Tomcat-》Web容器
1.2什么是IoC?
IoC=Inversion of Control翻译成中文就是“控制反转”的意思,也就是说Spring是一个“控制反转”的容器。
控制反转:对象的创建权反转给别人了
比如:
创建一个类,A类引用B类,B类引用C类,C类引用D类的时候直接在构造函数里面new,
会有一个问题,当一个构造方法发生变化的时候,整个调用链都要发生变化,不在new了,
而是把当前的对象传入进来,这个时候虽然整个调用链还是A调用B,B类引用C类,C类引用D类,但是当D发生变化的时候,CBA不需要进行代码修改,从而解决了代码的耦合性,也就是IOC
降低代码的耦合性。
基本功能:
1.将对象存入容器。
2.从容器中取出对象。
1.3 DI概念说明
DI=Dependency Injection,依赖注入。所谓以来注入就是由IoC容器在运行期间,动态的将某种以来关系注入到对象之中。所以,以来注入和控制反转是从不同的角度描述同一间事情,就是指通过引入IoC容器,利用依赖关系注入的方式,实现对象之间的解耦。
从广义上来说IoC=DI,从不同维度来描述同一个问题。IoC是设计思想,DI是具体实现。
2.Spring概念【托管很多对象的框架】【单例+懒汉】
1.创建maven项目
2.添加Spring框架依赖(spring-context,spring-beans)
3.创建启动类
2.1 Spring对象的存储
1.先创建Bean对象
2.将对象存入到bean中
(a)在resources下创建一个spring配置文件
(b)将bean对象配置到spring配置文件中
3.从spring中读取到Bean对象
(a)根据名称获取Bean
(b)根据Bean类型获取Bean【容易出错:当Spring中存在相同的对象时,使用类型来获取Bean就会报错】
(c)根据Bean名称+Bean类型获取Bean对象
获取Spring对象的两种方式:ApplicationContext和BeanFactory
相同点:
- 都可以得到Spring上下文对象
- 都是来自Spring的顶级接口
不同点:
继承关系和功能:ApplicationContext属于BeanFactory的子类:BeanFactory只有最基础访问Bean的能力,而ApplicationContext除了拥有BeanFactory功能之外,还包含了更多的功能:如国际化支持、资源访问、事件传播等。
ApplicationContext是一次性加载并初始化所有的Bean对象,所以在后面访问Bean对象时会很快。而BeanFactory是需要某个Bean对象时,采取加载Bean对象,所以他在执行Bean获取时,比较慢。
更加简单的讲对象存储到Spring中
3. 五大类注解
@Controller:控制器
@service:服务
@Respository:仓库
@Component:组件
@Configuration:配置
4.方法注解:@Bean-》将当前修饰方法的方法对象存储到Spring当中。
约定>配置
1.如果类名首字母是小写,要怎么从Spring中获取Bean?
和首字母是大写的是一致的,都是用的将类名首字母小写的方式来获取对象
2.如果首字母和第二字母都是大写,会怎么样?
当使用默认规则,首字母小写获取Bean对象时,会失败,正确获取Bean的方式是使用原类名,就能成功获取到了
3.项目中没有目录,所有的类都写在java根路径下,怎么存取Bean对象?
最佳方案:给项目创建合适的路径【配置根路径**加载比较慢,因为配置了根路径下所有的】
结论:当使用5大类注解的时,默认情况下获取Bean对象,只需要将类名的首字母小写即可;然而当Bean对象首字母和第二个字母都是大写的时候,此时需要使用原类名才能正确获取到Bean对象。
5.为什么需要五个类注解?
a)通过类注解可以了解当前类的用途(看到车牌 陕A 就知道这是西安的车一样)
b)功能由细微的不同
五大类注解的用途
程序的工程分层,调用流程如下所示:

1.@Controller(控制器):表示的是业务逻辑层,用来控制用户的行为,它用来检查用户此参数的有效性。
2.@Service(服务):归属于服务层,调用持久化类实现相应的功能。【不直接和数据库交互的,类似于控制中心】
3.@Repository(仓库):归属于持久层,是直接和数据库进行交互的。通常每一个表都会对应一个@Repository
4.@Configuration(配置):归属于配置层,是用来配置当前项目的一些信息。
5.Component(组件):归属于公共工具类。提供某些公共方法。
6.五大类注解的关系
@Component是除了@Component的所有类的父类。
存对象到Spring中实现方式2:
使用@Bean方法注解:将返回的对象存储到Spring中。
注意事项:@Bean注解一定要配合5大类注解一块使用,否则是无效的注解。
当给@Bean设置了name属性之后,使用原方法名就不能获取到对象了,只能使用设置的方法名
注入的三种方式:
@Autowired、@Resource
1.属性注入
优点:实现简单
缺点:
- 不能注入不可变(final)的对象、
- 只适用IoC容器、
- 更容易违背单一设计原则
2.setter方法注入
优点:更加符合单一设计原则
缺点:
- 不能注入不可变(final)的对象、
- 注入对象可被修改【set方法是普通set方阿飞,可以被重复调用,在调用的时候就存在被修改的风险】
3.构造方法注入【当一个类中只有一个构造方法的手,可以省略@Autowired】
优点:
- 可以注入不可变的对象
- 注入的对象不会被修改
a)加了final修饰符
b)构造方法是随着类加载只执行一次的(不像set有可能执行多次被修改的)
- 注入的对象会被完全初始化【使用构造方法带来的优点】
- 通用性更好
缺点:没有属性注入简单
小结:日常开发中,使用属性注入实现更简单的读取Bean,依然是主流的实现方式。
@Autowired、@Resource的区别?
相同点:都是用来实现依赖注入的
不同点:
1.功能支持不同:
@Autowired支持属性注入,setter注入、构造方法注入
@Resource支持属性注入和setter注入,但不支持构造方法注入
2.出身不同:@Autowired来自Spring框架,@Resource来自JDK
3.参数支持不同:@Resource支持更多的参数设置,而@Autowired只支持required参数
相关文章:
Java框架学习--Spring
1.Spring概念【托管很多对象的框架】 一个包含了众多工具方法的IoC容器。 1.1 什么是容器? 容器是用来容纳各种物品的(基本)装置。--来自百度百科 之前常见的容器有: List/Map-》数据存储容器 Tomcat-》Web容器 1.2什么是IoC? IoCInve…...
【爬虫】Xpath和CSS信息提取的方法异同点
类似点: Xpath与css都有web页面定位元素的功能Xpath与css结构类似 区别: 1. Xpath比较强大,而css选择器在性能上更优,运行速度更快,语法更简洁 CSS再chrome,火狐查找速度快,效率高࿰…...
数字IC前端学习笔记:FIFO的Verilog实现(二)
相关文章 数字IC前端学习笔记:LSFR(线性反馈移位寄存器) 数字IC前端学习笔记:跨时钟域信号同步 数字IC前端学习笔记:信号同步和边沿检测 数字IC前端学习笔记:锁存器Latch的综合 数字IC前端学习笔记&am…...
2.2 搭建Spark开发环境
一、Spark开发环境准备工作 由于Spark仅仅是一种计算框架,不负责数据的存储和管理,因此,通常都会将Spark和Hadoop进行统一部署,由Hadoop中的HDFS、HBase等组件负责数据的存储管理,Spark负责数据计算。 安装Spark集群前…...
webpack指定输出资源的路径和名称
如图,在前面的章节我们打包后的文件默认都输出到了dist目录下,无论是图片、还是js都在同一级别目录,这里目前处理的资源比较少,如果资源一多,所有的资源都在同一级目录,看起来很费劲。 那么这节就介绍一下…...
Spring事务四
spring 事务的隔离级别 当多个事务同时访问数据库中的同一数据时,可能会出现数据不一致的情况,为了避免这种情况发生,就需要使用事务隔离机制。Spring框架中定义了5种事务隔离级别,分别为: DEFAULT(默认隔…...
项目管理专业人员能力评价等级证书(CSPM)的级别介绍
2021年10月,中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系,开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会(CAS)组织开展的项…...
设计模式-创建型模式(单例、工厂、建造、原型)
Concept-概念前置 设计模式:软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。 面向对象三大特性:封装、继承、多态。 面向对象设计的SOLID原则: (1)开放封闭原则&#…...
用饭店来形象比喻线程池的工作原理
一、线程池解决的问题? 使用线程池主要解决在程序中频繁创建和销毁线程导致的资源浪费,线程池可以维护一定量的线程来执行所需要的任务,维护的线程也可以重复使用。 二、用形象的饭店来解释工作原理 线程池就相当于一家饭店, 任…...
GO学习笔记之表达式
GO学习笔记之表达式 保留字运算符优先级二元运算符位运算符自增指针 保留字 Go语言仅25个保留关键字(keyword),这是最常见的宣传语,虽不是主流语言中最少的,但也确实体现了Go语法规则的简洁性。保留关键字不能用作常量…...
005Mybatis返回值(ResultMap 一对多,多对多)
属性 id 应该总是指定一个或多个可以唯一标识结果的属性。 虽然,即使不指定这个属性,MyBatis 仍然可以工作,但是会产生严重的性能问题。 只需要指定可以唯一标识结果的最少属性。显然,你可以选择主键(复合主键也可以…...
把玩数据在内存中的存储
前言:时光如梭💦,今天到了C语言进阶啦😎,基础知识我们已经有了初步认识, 是时候该拔高拔高自己了😼。 目标:掌握浮点数在内存的存储,整形在内存的存储。 鸡汤:…...
Nginx运行原理与基本配置文件讲解
文章目录 Nginx基本运行原理Nginx的基本配置文件serverlocationroot 与 alias 的区别server 和 location 中的 rootnginx欢迎页 本文参考文章Nginx相关文章 Nginx基本运行原理 Nginx的进程是使用经典的「Master-Worker」模型,Nginx在启动后,会有一个master进程和多个…...
openGauss5 企业版之SQL语法和数据结构
文章目录 1.openGauss SQL 语法2. 数据类型2.1数值类型2.2 布尔类型2.3 字符类型2.4 二进制类型2.5日期/时间类型2.6 几何类型2.7 网络地址类型2.8 位串类型2.9 文本搜索类型2.10 UUID数据类型2.11 JSON/JSONB类型2.11 HLL数据类型2.12 范围类型2.13 索引2.14 对象标识符类型2.…...
TClientDataSet 模拟 EXCEL表
日常处理数据时,经常需要,从EXCEL表格中,批量导入数据,通过 XLSReadWriteII编程,会很快导入。 但是,客户提供的EXCEL表的字段,数据格式,字段的排序,有很大的区别。因此&a…...
Hazel游戏引擎(012)GLFW窗口事件
文中若有代码、术语等错误,欢迎指正 文章目录 前言如何确定GLFW窗口事件的回调函数参数Application接收事件回调流程原项目流程(12345)自己写的简单Demo与流程(123) 前言 此节目的 为了完成008计划窗口事件的接收glfw窗口事件以及回调部分 此节要完成 使用glfw函数…...
Nenu算法复习第六章
目录 补充知识点 1160: 6001 第几天? 1161: 6002 时间格式转换 1162: 6003 星期几? 1163: 6004 18岁生日、 补充知识点 闰年的判断方法: 能被四整除但是不能一百整除或者能被400整除 例题: 题目描述 经常会有人问你怎么判断闰年&…...
知识付费社群:最好的知识传播方式
知识付费是一种网络内容付费方式,它让知识传播者通过网络以付费的方式向社会大众或特定平台传递知识、技能和智力资源。 知识付费传播的成功离不开用户,他们是核心节点,也是受众和粉丝的重要组成部分。用户不仅可以生产和传播知识࿰…...
局域网内不同网段的设备互相连接设置
目录 介绍1、打开网络连接,找到本地网络->属性->ipv4->属性->高级:2、在高级设置页面,我们添加一个IP,这个IP和板子在一个网段,我这里设置的是192.168.253.101:3、设置完成即可生效,…...
LVS+Keepalived 群集
目录 一、keepalived概述 1.keepalived工作原理 2.keepalived体系主要模块及其作用 3.判断服务器主备,及如何配置浮动IP 二、keepalived的抢占与非抢占模式 三、部署LVSkeepalived 1.配置负载调度器(主备相同) 1.1配置keepalived&…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
