Spring理解(通俗理解),少侠这里有一本武林秘籍你要了解下吗?

ssm已经学习好久,总结是必不可少的,话不多说上图镇楼(不是楼主本人)
Spring理解(通俗理解),少侠这里有一本武林秘籍你要了解下吗?_第1张图片

Spring的概述

什么是Spring?
我们可以从度娘上看到这样有关Spring的介绍:
Spring理解(通俗理解),少侠这里有一本武林秘籍你要了解下吗?_第2张图片

这个记不记,你懂的吧?

说得更加详细一点,Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架。
为什么说Spring是一个一站式的轻量级开源框架呢?EE开发可分成三层架构,针对JavaEE的三层结构,每一层Spring都提供了不同的解决技术。
Spring理解(通俗理解),少侠这里有一本武林秘籍你要了解下吗?_第3张图片

从对Spring的简要介绍中,我们知道了Spring的核心有两部分:

1.IoC**:即控制反转。举例来说,在之前的操作中,比方说有一个类,我们想要调用类里面的方法(不是静态方法),就要创建该类的对象,使用对象调用方法来实现。但对于Spring来说,Spring创建对象的过程,不是在代码里面实现的,而是交给Spring来进行配置实现的;
2.AOP**:即面向切面编程。这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。****
为什么使用AOP?相当于你别给我扯犊子了,头发都掉光了,我就写逻辑,事务,安全什么的交给程序完成~下面会举例

在度娘上查看有关Spring的介绍时,我们可以找到如下一系列Spring的优点,这就是我们要学习Spring框架的原因。
Spring理解(通俗理解),少侠这里有一本武林秘籍你要了解下吗?_第4张图片
记不住无脑简化开发,让程序员头发多一点,活的长一点~
在这里插入图片描述Spring理解(通俗理解),少侠这里有一本武林秘籍你要了解下吗?_第5张图片
这里提一下解耦是什么,话不多说,先上图
Spring理解(通俗理解),少侠这里有一本武林秘籍你要了解下吗?_第6张图片
如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。图1中描述的就是这样的一个齿轮组,它拥有多个独立的齿轮,这些齿轮相互啮合在一起,协同工作,共同完成某项任务。我们可以看到,在这样的齿轮组中,如果有一个齿轮出了问题,就可能会影响到整个齿轮组的正常运转。
而我们完成一个项目开发,耦合必不可少,工业级应用的规模越来越庞大,,对象之间的依赖关系也越来越复杂,经常会出现对象之间的多重依赖性关系,因此,架构师和设计师对于系统的分析和设计,将面临更大的挑战。对象之间耦合度过高的系统,必然会出现牵一发而动全身的情形。

Spring的快速入门

Spring的版本
需要说明的是,Spring的教程使用的版本是spring-framework-4.2.4.RELEASE。

IoC概述
什么是IoC?
IoC即Inversion of Control,反应过来就是控制反转。啥是控制反转啊?控制反转指的就是将对象的创建权反转给(交给)了Spring,其作用是实现了程序的解耦合。也可这样解释:获取对象的方式变了,对象创建的控制权不是"使用者",而是"框架"或者"容器"。用更通俗的话来说,IoC就是指对象的创建,并不是在代码中用new操作new出来的,而是通过Spring进行配置创建的。

Spring的IoC的底层实现原理
这里先给出结论:Spring的IoC的底层实现原理是工厂设计模式+反射+XML配置文件。 就拿持久层(也即dao层,data access object,数据访问对象)的开发来说,官方推荐做法是先创建一个接口,然后再创建接口对应的实现类。所以,这里,我会以dao层的开发为例来证明Spring的IoC的底层实现原理就是工厂设计模式+反射+XML配置文件。
首先,创建一个Userdao接口。

Userdao

然后,再创建Userdao接口的一个实现类(UserDaoImpl.java)。
Spring理解(通俗理解),少侠这里有一本武林秘籍你要了解下吗?_第7张图片

接着,我们在service层中调用dao层,核心代码如下:
在这里插入图片描述

这时我们便可发现一个缺点:service层和dao层耦合度太高了,即接口和实现类有耦合(它俩之间的联系过于紧密),一旦切换底层实现类,那么就需要修改源代码,这真的不是一个好的程序设计,好的程序设计应当满足OCP原则(也即开闭原则),即在尽量不修改程序源代码的基础上对程序进行扩展。说到这里,我就不得不稍微讲一下面向对象设计的七大原则了,它不必强记,重在理解。
Spring理解(通俗理解),少侠这里有一本武林秘籍你要了解下吗?_第8张图片

出现的这个问题该如何解决呢?解决方法是使用工厂设计模式进行解耦合操作。所以,我们需要创建一个工厂类,在工厂类中提供一个方法,返回实现类的对象。
Spring理解(通俗理解),少侠这里有一本武林秘籍你要了解下吗?_第9张图片

这样,在service层中调用dao层的核心代码就变为了下面的样子。
在这里插入图片描述

如若这样做,会发现又产生了一个缺点:现在接口和实现类之间是没有耦合了,但是service层和工厂类耦合了。如果真正想实现程序之间的解耦合,那么就需要使用到工厂设计模式+反射+XML配置文件了。所以,我们这里提供一个XML配置文件,并且该配置文件中有如下配置信息。

<bean id="userDao" class="com.meimeixia.dao.impl.UserDaoImpl" />

1
然后再来创建一个工厂类,在工厂类中提供一个返回实现类对象的方法,但并不是直接new实现类,而是使用SAX解析配置文件,根据标签bean中的id属性值得到对应的class属性值,使用反射创建实现类对象。
Spring理解(通俗理解),少侠这里有一本武林秘籍你要了解下吗?_第10张图片

你可能感兴趣的:(java)