【进阶】Spring核心思想及其项目创建

news2025/1/18 3:19:31

努力经营当下,直至未来明朗!

文章目录

  • 一、Spring核心思想
    • 1. 容器
    • 2. IoC
    • 3. SpringIoC
    • 4. DI概念说明
  • 二、Spring的创建和使用
    • 1. 创建Spring项目
      • 3. ==Maven项目导入jar包和设置国内源的方法==:
    • 2. Spring对象的存储/存储Bean对象
    • 3. 从Spring中读取到Bean对象/获取Bean对象并使用
  • 小结


普通小孩也要热爱生活!

一、Spring核心思想

面试重点关注:自己理解后的总结,而不是照本宣科

  1. Spring的概念:我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃⽽庞⼤的社区,这就是它能⻓久不衰的原因。Spring ⽀持⼴泛的应⽤场景,它可以让 Java 企业级的应⽤程序开发起来更简单。
  2. 概括:Spring就是==一个包含了众多工具方法的IoC容器。

1. 容器

  1. 容器:就是用来容纳某种物品的(基本)装置。
  2. 我们接触的容器:

① List/Map -> 数据存储容器
② Tomcat -> Web 容器

2. IoC

  1. IoC是“控制反转”(Inversion of control),是对对象的生命周期进行控制反转,也就是将对象生命周期控制权交给Spring去管理。
  2. IoC容器的优点:解耦合
    1)传统开发:有耦合性问题,程序中一部分改变,与其相关的所有代码都需要连同改变。
    2)Ioc开发:依赖性传参是直接将对象作为参数进行传递,修改其中一个不太影响另外的类。
    控制反转其实是修改对象的生命周期,不再是自己控制,而是交由别的对象来控制的。(生命周期控制权的反转
    3)面试回答问题:举栗子(依赖 + IoC)
    0
    1

3. SpringIoC

  1. 如何理解“Spring 是⼀个 IoC容器”这句话呢?
    :① Spring 是⼀个 IoC(控制反转)容器,重点还在“容器”⼆字上,那么它就具备两个最基础的功能:将对象存入容器和从容器中取出对象。
    ② 也就是说学 Spring 最核⼼的功能,就是学如何将对象存⼊到 Spring 中,再从 Spring 中获取对象的过程。
  • 将对象存放到容器中的好处:将对象存储在 IoC 容器,相当于将以后可能⽤的所有⼯具制作好都放到仓库中,需要的时候直接取就⾏了,⽤完再把它放回到仓库。
  • ⽽ new 对象的⽅式相当于,每次需要⼯具了才现做,⽤完就扔掉了也不会保存,下次再⽤的时候还得重新做,这就是 IoC 容器和普通程序开发的区别。
  • 小结:容器:相当于仓库,持久;
    new对象:用到才创建,用完就扔。

③ Spring 是⼀个 IoC 容器,说的是对象的创建和销毁的权利都交给 Spring 来管理了,它本身⼜具备了存储对象和获取对象的能⼒。

4. DI概念说明

面试题】简要说明IoC和DI的区别
1)概念:
IoC是控制反转,也就是反转对象的生命周期的控制方; DI是依赖注入(dependency injection),在程序运行期间,动态的将某中依赖引入到当前对象的行为/机制
2)从广义上来说:IoC=DI,是从不同的维度来描述同一个问题,就是指通过引⼊ IoC 容器,利⽤依赖关系注⼊的⽅式,实现对象之间的解耦
3)IoC是一个设计思路,DI是具体实现。

【补充】程序开发的基本规范:
① 和程序相关的所有地方不能出现任何中文。如:项目的目录不能出现中文,项目的名称不能出现中文
② 和代码相关的命名不能是拼音或汉字,一定是英文。


二、Spring的创建和使用

1. 创建Spring项目

  1. Spring项目的创建步骤:
    1)创建一个Maven项目
    2)添加Spring框架依赖(spring-context、spring-beans)【关键!
    3)创建启动类(这是非必要的,但是相当于一个单元测试)

  2. 添加Spring框架依赖

3
但是:是有可能导入失败的!
此时参考下面Maven项目导入jar包和设置国内源的方法。

3. Maven项目导入jar包和设置国内源的方法

1)配置好国内的Maven源
① File中的Settings和 Settings for New Projects… 都要进行设置
6
② -> 搜索maven,并进行该页面上相关设置
7
③ -> 使用VSCode打开对应目录下的settings.xml文件,并找到mirrors进行修改配置(建议配置阿里云镜像)
如果没有settings.xml文件就自己添加,有的话千万不要覆盖
8
9
④ 此时重新reload就行

2)如果还是错误,删除本地maven仓库的jar包并重新下载:【目前本地仓库的jar包可能是不完整的jar包】
File -> Settings -> 搜索Maven -> 找到路径,打开该目录并删除所有文件 -> 然后reload就行
10
3)如果reload之后还是错误,重复1)2)步骤至少三次!
4)如果还是错误,就可能是以下问题

① 上⾯的步骤没看仔细:重新认真的逐字逐句的观看和配置;
② Maven 路径中出现中⽂:如果出现中⽂会导致下载了 jar 包,但是在项⽬中不能正常使⽤;
③ 当前⽹络运营商有问题:当前所在区域连接的⽹络运营商(中国电信、移动…)连接数据源有问题,尝试更好⽹络,使⽤⼿机热点或朋友的⼿机热点尝试,如果还是还⾏,间隔 4 ⼩时之后再试。

2. Spring对象的存储/存储Bean对象

  1. 先创建Bean对象:其实也就是创建一个类
    20

  2. 将Bean对象存储到Spring中:通过xml来实现的
    1)在resources中添加Spring配置⽂件 spring-config.xml:resources -> new -> File -> 命名没有特殊要求,但是尽量能够表明文件是啥(注意加上后缀!)
    21
    2)将Bean对象配置到Spring配置文件spring-config.xml中:id自己设(是bean对象的别名,不能重复),class是对象本身:包名.类名(没有包就直接类名即可)
    【后期进行读取bean对象就是通过id进行获取到的】
    22

3. 从Spring中读取到Bean对象/获取Bean对象并使用

  1. 读取对象:在java源文件中读取
  2. 得到Spring上下文对象
    ① 使⽤ ApplicationContext常用):
ApplicationContext context =
                new ClassPathXmlApplicationContext("spring-config.xml");
 // 这里的参数名字一定要和resources底下的xml文件名相对应!

23

使用BeanFactory

BeanFactory context =
                new XmlBeanFactory(new ClassPathResource("spring-config.xml"));

25

  1. 从Spring中取出Bean对象
    ① 使用getBean方法,参数是id(与之前在xml中设置的id一定要对应!)需要进行类型强转。【如果是null强转就会出错】
    26
    ② 使用getBean方法,参数是类对象(但是当spring-config.xml中存在相同类对象之后就会出现问题)
    27

③ 使用getBean方法,第一个参数是id,第二个对象是类对象.class。【最常使用
28

  1. 使用Bean(可选)
    29

5.【经典面试题】在得到Spring对象时有两种方式(ApplicationContext和BeanFactory),这两种方式有何区别?
1)相同点
① 都可以得到Spring上下文对象
② 都是来自Spring的顶级接口

2)区别
继承关系和功能:ApplicationContext属于BeanFactory的子类;ApplicationContext的功能多于BeanFactory,BeanFactory只有最基础访问Bean的能力,而ApplicationContext除了拥有BeanFactory功能之外,还包含了更多的功能,如:国际化支持、资源访问、事件传播等。
性能方面:ApplicationContext加载方式是将Bean对象一次性加载,所以在后面访问Bean对象时会很快;BeanFactory需要某个Bean对象时,才去加载该Bean对象,所以它在执行Bean获取时比较慢。【也就是:用空间换时间】
(ApplicationContext有自己的一套策略)

PS:⽽ ClassPathXmlApplicationContext 属于 ApplicationContext 的⼦类,拥有 ApplicationContext 的所有功能,是通过 xml 的配置来获取所有的 Bean 容器的。

  1. 补充:

① 静态方法:全局的工具方法,类加载时就存在。
② 实例方法/普通方法:需要时才进行实例化。


小结

  1. Spring 是什么?其核心思想是啥?
  2. DI和IoC的区别是啥?
  3. Spring的创建和使用:
    ① 配置xml文件
    ② 存对象(Bean创建、xml中配置bean对象)
    ③ 取对象(获取Spring上下文、获取Bean对象、使用Bean对象)

yy

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

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

相关文章

Electron自定义协议Protocol对web网站做数据交互,使用SSE实时数据推送到网站

(防盗镇楼)本文地址:https://blog.csdn.net/cbaili/article/details/128651549 前言 最近在撸VUE,想要实现一份代码既能构建Web又能构建Electron应用 并且能够判断环境是浏览器还是Electron,随后在Electron中做一些特定的事情 以往的Electron通信依靠IPC通信完成,但是发布到…

模板(template)包含与继承

Django 模板查找机制: Django 查找模板的过程是在每个 app 的 templates 文件夹中找(而不只是当前 app 中的代码只在当前的 app 的 templates 文件夹中找)。各个 app 的 templates 形成一个文件夹列表,Django 遍历这个列表&#x…

超详细的Socket通信原理和实例讲解

我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket&am…

【算法篇-排序】八大排序

十大排序0.常见排序1. 插入排序(直接插入排序和希尔排序)1.1直接插入排序1.2希尔排序(缩小增量排序)2.选择排序2.1选择排序2. 2堆排序3.交换排序3.1 冒泡排序3.2快速排序3.2.1hoare版本快排3.2.2挖坑法3.2.3前后指针法3.3.4 快排的…

【Linux】在Linux上写一个进度条小程序

👑作者主页:安 度 因 🏠学习社区:安度因的学习社区 📖专栏链接:Linux 文章目录一、前言二、理解 \r 与 \n三、行缓冲1、提出问题2、认识行缓冲3、解答与拓展4、倒计时四、进度条五、结语如果无聊的话&#…

2023/1/12总结

今天学习了图的割点与桥的算法 图的割点以及桥 图的割点:割点是指在无向连通图中,某点和该点连接的边去掉以后图便不再连通 在上面的图片中(上面是一个有向图,我们当作无向图即可)我们知道当我们去掉A点之后&#xf…

进阶必看 | 6个让Revit建模起飞的习惯,高效就靠它

大家好,这里是建模助手。 相信各位都知道,建模助手一向以来都追求更高,更快,更强。但是有些问题,不是插件本身能解决的事情,而是项目本身的问题。 一般来说,当Revit项目模型大于150MB时&#…

Linux安装sonarqube(含各种错误处理)

目录 1.下载安装 2.错误处理 2.1.JDK版本不适配 2.2.can not run elasticsearch as root 1.下载安装 下载地址: Download | SonarQube | Sonar (下载页面向下拉)选择稳定版本下载。 解压后启动脚本在: bin/{对应操作系统}…

【dp】买卖股票的最佳时机系列题目

文章目录121. 买卖股票的最佳时机122. 买卖股票的最佳时机 II309. 最佳买卖股票时机含冷冻期123. 买卖股票的最佳时机 III188. 买卖股票的最佳时机 IV121. 买卖股票的最佳时机 本题的重点是:只能在前面某一天买入,后面某一天卖出。要不就是不买入&#x…

外贸业务员怎样能提高自己的工作能力?

关于外贸业务员提高自己的工作能力,米贸搜整理如下,希望可以帮助到你:1.树立一个好的目标,并坚定不移地朝着这个目标努力。这个问题,无论你是新手还是有经验的外贸业务员,相信每个外贸业务员都或多或少的思…

K_A11_004 基于STM32等单片机采集热敏传感参数串口与OLED0.96双显示

K_A11_004 基于STM32等单片机采集热敏传感参数串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:四、部分代码说明1、接线说明1.1、STC89C52RC热敏传感模块1.2、STM32F103C8T6热敏传感模块五、基础知识学习与相关资料下…

NCS8823替代方案|CS5260Typec转VGA可替代NCS8823|低BOM成本替代NCS8823设计

NCS8823替代方案|CS5260Typec转VGA可替代NCS8823|低BOM成本替代NCS8823设计 NCS8823是一款低功耗、DisplayPort信号至VGA转换器,通过USB Type-C连接器。它是 适用于USB Type-C至VGA转换器,适配器、对接设备。此设备结合了基于USB Type-C的 DisplayPort接收器和VGA…

华为私有云平台FusionCompute搭建

一、FusionCompute架构 架构CNA作为虚拟化操作系统,VRM作为虚拟化管理平台正常主机都安装CNA,单独建立VRM集群作为管理集群,我测试环境就一台主机,所以CNA和VRM装在同一台主机上,并且用这台主机分配虚拟机进行测试。 …

前端基础(十二)_函数高级、全局变量和局部变量、 预解析(变量提升)、函数返回值

作用域 作用域指:变量或函数的有效使用范围,有全局作用域与局部作用域两种。 全局变量和局部变量 全局变量:直接在 script 标签下声明的变量,任何地方都能访问,任何地方都能对其值进行改变。 局部变量:函…

CAN总线的个人理解

部分内容可以参考:https://blog.csdn.net/xwwwj/article/details/105372234? CAN概念简介 CAN是Controller Area Network 的缩写 CAN协议经过ISO标准化后有两个标准:ISO11898标准和ISO11519-2标准。其中ISO11898是针对通信速率为125Kbps~1Mbps的高速通…

适合制造业的ERP推荐?使用ERP系统的好处有哪些?

对于制造型企业来说,除了涉及到产品的生产制造和原料采购,还需要管理库存、销售、财务等方方面面。制造业的ERP系统的使用,尤为重要。一个好的制造业的ERP系统在企业管理中起到至关重要的作用,针对制造业的ERP系统提供贴合行业特性…

用cmd命令窗口运行第一个java程序同时分享idea写的代码用cmd编译运行【建议收藏】

在上一篇文章https://blog.csdn.net/qq_52545155/article/details/128651296?spm1001.2014.3001.5502教大家安装了jdk版本,那么我们来编写一个java程序,通过cmd命令运行起来看看效果叭!!! 一、基本代码准备 1、打开记…

超全的SQL注入姿势总结

目录 常见姿势 环境搭建 信息收集 报错注入 延时注入 布尔注入 堆叠注入 绕过方法 绕过引号 or and xor not绕过 绕过注释符 内联注释绕过 类型转换绕过 绕过 WAF绕过-应用层 常见姿势 环境搭建 use mysql; create table if not exists my_table( id int PRIMA…

HC小区管理系统安装记录一次群里小伙伴梓豪方式安装问题

记录一次群里小伙伴安装,供大家参考 问题排查 打开梓豪地址查看 Redis MySQL Nginx 是否启动成功,查看日志启动成功 MySQL正常 redis 没有报错 Nginx也正常 查看hc 是否启动成功,点击控制台 查看docker 发现8008 端口被占用了&#xff0c…

【异常】原来提示SocketTimeoutException:connect timed out还可能是外部因素导致

一、现象截图 一大早收到ELK的邮件提醒,让我来看看,又是哪个妖怪在作孽? 二、问题定位 2.1 SocketTimeoutException:connect timed out 经验告诉我,这个问题一般是第三方平台的问题,大部分原因是发起Http请求&…