Spring的基本使用与概念

最近北海正在看视频自学Spring框架,所以认真的总结了今天学的一些内容,如果对你有用的话,可以点赞、评论哦。

01本篇文章结构图

在这里插入图片描述

02Spring的架构

在这里插入图片描述

03搭建开发环境

1、打开http://maven.apache.org/网站,可以百度自行配置好环境变量。
2、下载好Eclipsse或者IDEA,个人习惯用Eclipse。
3、打开网站https://spring.io/projects/spring-framework 。根据网站https://jingyan.baidu.com/album/455a99505b399da16627783b.html?picindex=3下载好Spring4.3.2RELEASE版本,
4、JDK最新版本下载,可自行百度。

04IoC概念(Inversion of Contorol)

1、反转控制的过程和作用

在讲Spring的过程中,之所以涉及到IoC概念,是因为:
Spring本质是一个反转控制的容器

在过去的时候,软件还没有发展这么完善的时候,我们一般是面向过程的开发过程,比如体现在函数调用函数,全局变量满天飞,数据和行为分离,没有体现封装的特性。这种编程方式是不好的,没有软件设计意识,不容易封装变化的。

应用系统需要封装变化,企业的系统应用与业务相关,业务变化很大,所以要面向对象编程。

现在面向对象的编程的方式,类的职责很单一,职责明确。我们可以通过继承、封装,把系统模块化,组装变成一个整体来处理复杂的业务逻辑。
这样做的好处:如果想要替换系统中的任意一个行为,把这个类替换就行,其他的类、模块都不需要发生改变。

案例图:

没有反转控制时

这里是没有用容器管理各类信息的形式
客户端程序有大量的类,都在一个客户端类内,非常麻烦。

有反转控制时
在这里插入图片描述
反转控制的作用
1、把系统中大量的类创建出来;
2、根据逻辑组装起来;

但反转方法,可以通过程序的主体方法,即入口,通过IoC容器拿到要的对象,不需要做组装和创建的过程。

如果自己创建,不使用IoC容器,类很多,非常复杂,难以优雅的传递。系统的留存对象会很多,难以管理。
如果方法容器里,容器会管理好所有的类。

有容器各个模块的关系:

在这里插入图片描述
只需要通过接口耦(ou)合.

没有容器,各个组件相互独立:
在这里插入图片描述
2、反转控制的反转内容

1.1、获得依赖对象的过程被反转了。
原来是由程序创建组装的,程序负责,通过客户端来创建注入,
但本应该由系统负责。

2.2、系统的控制被反转了。
有了容器后,原来由系统底层的实现来控制这些控制,变成了由接口来控制。

在这里插入图片描述3如果运用好Spring

如果是个面向过程的编程设计,光知道Spring功能使用Spring是没有意义的。

只有模块化做好后,用Spring组装系统,这个时候Spring才是有意义的。

运用好Spring重点在于是否面向接口设计系统,是否可以模块化设计系统,通过Spring组装。

4使用IoC容器的好处

4.1动态替换Bean依赖对象
4.2程序更灵活更好实践面向接口编程
4.3代码更清晰更好实践优先使用对象组合,而不是类继承
4.4增加Bean复用性
4.5降低Bean之间的耦合
4.6代码结构更清晰

05Spring Bean概念

1、Spring bean是一个被实例化,组装,并通过Spring IoC容器所管理的对象
2、Spring bean可以配置在xml中,也可以通过注释配置
在这里插入图片描述

06Spring基本配置与使用

初学者可通过网站 https://www.tutorialspoint.com/spring/来学习使用Spring。

1、属性

1.1构造函数注入,意味着两个对象,对象A对对象B很重要。get/set方法注入意味着彼此两个对象彼此无关。
构造函数的参数很少时,推荐用构造函数注入。构造函数注入更加与容器无关。代码不能太多依赖Spring.

1.2如果使用get/set注入,在替换容器时,很容易遗漏一些参数。如果参数很多时,超过3个不适合用构造函数,使用get、se注入。

总结:构造函数注入看气起来没有大量参数,使用构造参数注入。
构造函数注入参数特别多,容易发生变化,导致接口不变,优先使用properties注入。永远不要使用字段注入,除了测试代码中。

三种注入方式:(constructor—args)构造函数注入、(properties)属性注入、字段注入。

1.3autowiring mode
代码量减少,但是可读性变差,其他人并不能读懂。
使用注解的情况下,只能这样用。
在使用xml配置的情况下,最好不用。

1.4延迟加载(lazy-initialization mode)
延迟加载会推迟加载的发生,让错误也延迟发生,进而发生更多的错误。
任何错误越早发生越好,如果他会发生的话。除非考虑性能方面的原因。

2、范围(scope)

2.1单例(singleton)
一般来说,单例是常用的。
在系统定义后,默认情况下,系统的所有的bean都是单例。请求第一次,第二次,都是同一个实例,这是单例。
2.2原型(prototype)
请求第一次,拿到第一个实例,请求第二次,拿到第二个不同的实例。

单例是常用的,原型是不常用的。

单例模式的单例,以应用来维护这个单例的唯一性。这种是不提倡的,类似于静态方法,不能继承和替代。
这里的单例是以容器来维护这个单例的唯一性。依赖注入来维护的单例是值得提倡的。
容器之内为单例,容器之外不为单例。

3注意使用的类
在这里插入图片描述

在这里插入图片描述
尽量不要引用Spring的InitializingBean和DisposableBean,尽可能不要引用Spring的类,减少依赖容器。

07小例子

1、遇到的问题
如何搭建Spring框架?
如何使用Maven?
如何通过Eclipse使用Spring框架?
如何用阅读Spring的源码?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值