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&…...
如何快速上手Fiji:科学图像分析的终极完整指南
如何快速上手Fiji:科学图像分析的终极完整指南 【免费下载链接】fiji A "batteries-included" distribution of ImageJ :battery: 项目地址: https://gitcode.com/gh_mirrors/fi/fiji Fiji是一个"开箱即用"的ImageJ发行版,专…...
专业级硬件控制终极指南:Lenovo Legion Toolkit深度定制与性能优化
专业级硬件控制终极指南:Lenovo Legion Toolkit深度定制与性能优化 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit …...
蓝牙低功耗基-蓝牙广播
概述 广告功能是任何蓝牙LE连接中的一个关键要素。对不同的广告参数、其含义以及如何通过调整这些参数来实现应用目标(无论是降低功耗、提高可靠性还是加快设备发现过程)建立基本的理解是十分重要的。 蓝牙LE中的广告功能主要用于两个主要目的。一是向邻近设备广播数据&#…...
从ZkClient到Curator:Spring Boot项目里ZooKeeper客户端选型与实战避坑指南
从ZkClient到Curator:Spring Boot项目中ZooKeeper客户端的技术选型与实战指南 在分布式系统架构设计中,服务协调与状态管理一直是核心挑战之一。作为分布式协调服务的经典解决方案,ZooKeeper凭借其强一致性、高可用性和丰富的通知机制&#x…...
CSS如何消除图片下方多余间隙_设置display-block改变盒模型
图片下方空白源于img默认inline导致的基线对齐;display:block最直接有效,vertical-align:middle等有兼容性与场景限制,font-size:0或line-height:0副作用大。图片下方空白是行内元素的基线对齐导致的默认情况下 <img> 是行内元素&#…...
别再死记硬背欧拉公式了!用Python可视化平面图,5分钟搞懂n-m+r=2
用Python可视化平面图:5分钟玩转欧拉公式的几何奥秘 第一次接触欧拉公式时,那个简洁的n-mr2让我既惊叹又困惑——为什么节点、边和面之间会存在如此精确的数学关系?直到我用代码亲手绘制出各种平面图,看着程序自动计算出的数值完…...
家里装修别乱接!电工师傅教你一眼分清零线火线,安全又省钱
家庭电路安全指南:零线火线快速识别与正确接线技巧 装修新房或改造旧电路时,最让人头疼的莫过于面对一堆颜色各异的电线不知如何下手。不少朋友抱着"反正都是电,接上能亮就行"的心态随意接线,轻则导致电器损坏ÿ…...
别再让照片忽明忽暗了!手把手教你搞定手机/相机里的自动曝光(AE)算法
别再让照片忽明忽暗了!手把手教你搞定手机/相机里的自动曝光(AE)算法 每次拍逆光人像,人脸总是黑得像剪影?夜景照片要么亮如白昼要么漆黑一片?别急着怪设备,可能是你没搞懂相机里那个"聪明…...
从超市购物车到推荐系统:深入浅出图解FP-Growth算法(附Python实战)
从超市购物车到推荐系统:深入浅出图解FP-Growth算法(附Python实战) 当你推着购物车在超市里闲逛时,是否想过货架上那些看似随意的商品摆放背后,其实隐藏着精密的数学算法?那些"买了啤酒的顾客也会买尿…...
Scapy实战:从ARP缓存投毒到中间人攻击的攻防演练
1. ARP协议与缓存投毒原理剖析 ARP(Address Resolution Protocol)是局域网通信的基础协议,它的作用就像现实生活中的电话簿,负责将IP地址转换成对应的MAC地址。每台设备都维护着一个ARP缓存表,记录着最近通信过的设备信…...
