[SSM网上书店基础与实战]-09初识Spring

224 阅读4分钟

一、Spring简介

JavaEE是一个非常庞大的体系,其中EJB技术,非常强大,但是非常笨重,一度导致JavaEE的发展进入了瓶颈。此时出现了一个框架,就是Java的有一个春天,所以这个框架命名为了Spring。

Spring是一个轻量级,开源的框架,基本上实现了java的“一次编译,随处运行”的承诺

Spring的优点:

    低侵入式设计,代码污染极低

    独立于各种服务器,比较好实现“一次编译,随处运行”

    DI机制(控制反转/依赖注入),实现复杂组件结合的高效化

    spring不完全依赖于spring,开发者可以选择全部或部分的spring框架进行使用

了解一个人

image.png Spring全家桶

image.png

二、Spring中的两种设计模式

Spring框架中大量的使用两种基本的设计模式

工厂模式

【降低耦合】

可以将java的调用者从被调用者实现的逻辑中分离出来,调用者只需要关心被调用者必须满足的规则(接口),不用关心具体的实现过程,面向接口编程的优势

单例模式/单态模式

【降低开销】

使内存中有且只有一个该对象的实例

1、单态模式

采用单态模式,不论创建多少个该类的实例,能够保证,使用的实例使用一个

比如:数据库引擎访问点只有一个

案例

新建一个spring项目

image.png

结果

image.png

2、工厂模式

工厂模式,特定的参数有生产产品,能够大大降低程序的耦合

案例

接口

image.png

实现类1

image.png

实现类2

image.png

工厂类

image.png

测试

image.png

结果

image.png

扩展

image.png

测试

image.png

结果

image.png

三、Spring框架的搭建和使用

引入jar文件

image.png

项目结构

image.png

配置文件

image.png

1、两种设计模式的实现

Spring又是我们称之为“容器”,Spring就是一个大工厂,任何类(配置到Spring中管理的类,)都通过该工厂进行生产

配置

image.png

测试

image.png

结果

image.png

2、小结

Spring容器可以管理所有类,默认都是单例模式,效率高于非单例模式。

优点:使用类,不用考虑别的事情,可以是开发者专注于业务逻辑。

注意

image.png

结果

image.png

四、DI

早期版本IOC,控制反转,后来改为依赖注入(DI)

生活案例

    现实生活中,张三找女朋友

       情况1:张三主动去追女孩子(张三依赖女孩子)

       情况2:张三被女孩子追(张三不依赖女孩子)

    最理想的就是情况2

程序中

两个类

image.png

image.png

使用时

image.png

image.png

最理想的情况,编码人员无需维护类间关系,交给框架自动维护,“召之即来,挥之即去”

1、配置方式

接口

image.png

image.png

实现类

image.png

image.png

image.png

配置applicationContext.xml

image.png

测试

image.png

image.png

image.png

image.png

扩展

image.png

image.png

image.png

测试类不变,扩展性很强,耦合度降低

2、注解方式

案例

对比A类依赖B类,B类依赖C类,C类依赖D类,D类中有一个方法myfun(),编码实现A类对象调用D的myfun()方法

image.png

image.png

image.png

image.png

image.png

使用注解方式来实现DI,applicationContext.xml

image.png

加入注解

image.png

image.png

image.png

image.png

测试

image.png

image.png

总结

DI机制,减少了我们维护类间关系的繁琐代码,使用起来非常方便,扩展性强

五、AOP

面向切面编程

1、原始dao操作

接口

image.png

实现类

image.png

测试

image.png

结果

image.png

升级需求:加入功能,数据操作前进行权限验证,数据操作后进行日志记录

修改实现类

image.png

测试类不变,结果如下

image.png

问题:

    实现类中每个方法,每个方法做的操作都是相同的,代码非常冗余。

    如果dao有的新的类,新的方法加入,工作量会倍增

    这些操作能不能统一处理?

2、切面的原理

image.png

3、使用aop升级dao

接口实现类

image.png

增强类

image.png

配置

image.png

测试

image.png

结果

image.png

新增

image.png

image.png

image.png

image.png

4、Spring的aop开发

前置(before)

    在目标方法执行前执行增强

后置(after)

    在目标方法执行后执行增强

后置返回(after-returning)

    在目标方法执行后返回结果后执行增强

后置异常(after-throwing)

    在目标方法抛出异常退出方法后执行增强

环绕(around)

    全功能控制目标方法

注意

在spring中学习aop,主要的目的就是在SSM框架结合时,利用切面对dao的操作进行事务管理

    事物的特点:事物中包含若干语句,要么全都成功提交,要么就回滚至最初状态

写在最后:

初识Spring基本到这里就告一段落,下一篇是与前端结合的Spring MVC.

网盘链接:链接:pan.baidu.com/s/1B1NC5Nsw… 提取码:1234