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

文章介绍了Spring的核心思想,包括IoC(控制反转)和DI(依赖注入),阐述了Spring作为IoC容器的角色以及如何通过XML配置文件存储和获取Bean对象。同时,文章还详细讲解了Spring项目的创建步骤,包括Maven项目的配置和SpringBean的管理。最后提到了ApplicationContext和BeanFactory的区别。
摘要由CSDN通过智能技术生成

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


普通小孩也要热爱生活!

一、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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

'Dream是普通小孩耶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值