一、Spring简介
JavaEE是一个非常庞大的体系,其中EJB技术,非常强大,但是非常笨重,一度导致JavaEE的发展进入了瓶颈。此时出现了一个框架,就是Java的有一个春天,所以这个框架命名为了Spring。
Spring是一个轻量级,开源的框架,基本上实现了java的“一次编译,随处运行”的承诺
Spring的优点:
低侵入式设计,代码污染极低
独立于各种服务器,比较好实现“一次编译,随处运行”
DI机制(控制反转/依赖注入),实现复杂组件结合的高效化
spring不完全依赖于spring,开发者可以选择全部或部分的spring框架进行使用
了解一个人
Spring全家桶
二、Spring中的两种设计模式
Spring框架中大量的使用两种基本的设计模式
工厂模式
【降低耦合】
可以将java的调用者从被调用者实现的逻辑中分离出来,调用者只需要关心被调用者必须满足的规则(接口),不用关心具体的实现过程,面向接口编程的优势
单例模式/单态模式
【降低开销】
使内存中有且只有一个该对象的实例
1、单态模式
采用单态模式,不论创建多少个该类的实例,能够保证,使用的实例使用一个
比如:数据库引擎访问点只有一个
案例
新建一个spring项目
结果
2、工厂模式
工厂模式,特定的参数有生产产品,能够大大降低程序的耦合
案例
接口
实现类1
实现类2
工厂类
测试
结果
扩展
测试
结果
三、Spring框架的搭建和使用
引入jar文件
项目结构
配置文件
1、两种设计模式的实现
Spring又是我们称之为“容器”,Spring就是一个大工厂,任何类(配置到Spring中管理的类,)都通过该工厂进行生产
配置
测试
结果
2、小结
Spring容器可以管理所有类,默认都是单例模式,效率高于非单例模式。
优点:使用类,不用考虑别的事情,可以是开发者专注于业务逻辑。
注意
结果
四、DI
早期版本IOC,控制反转,后来改为依赖注入(DI)
生活案例
现实生活中,张三找女朋友
情况1:张三主动去追女孩子(张三依赖女孩子)
情况2:张三被女孩子追(张三不依赖女孩子)
最理想的就是情况2
程序中
两个类
使用时
最理想的情况,编码人员无需维护类间关系,交给框架自动维护,“召之即来,挥之即去”
1、配置方式
接口
实现类
配置applicationContext.xml
测试
扩展
测试类不变,扩展性很强,耦合度降低
2、注解方式
案例
对比A类依赖B类,B类依赖C类,C类依赖D类,D类中有一个方法myfun(),编码实现A类对象调用D的myfun()方法
使用注解方式来实现DI,applicationContext.xml
加入注解
测试
总结
DI机制,减少了我们维护类间关系的繁琐代码,使用起来非常方便,扩展性强
五、AOP
面向切面编程
1、原始dao操作
接口
实现类
测试
结果
升级需求:加入功能,数据操作前进行权限验证,数据操作后进行日志记录
修改实现类
测试类不变,结果如下
问题:
实现类中每个方法,每个方法做的操作都是相同的,代码非常冗余。
如果dao有的新的类,新的方法加入,工作量会倍增
这些操作能不能统一处理?
2、切面的原理
3、使用aop升级dao
接口实现类
增强类
配置
测试
结果
新增
4、Spring的aop开发
前置(before)
在目标方法执行前执行增强
后置(after)
在目标方法执行后执行增强
后置返回(after-returning)
在目标方法执行后返回结果后执行增强
后置异常(after-throwing)
在目标方法抛出异常退出方法后执行增强
环绕(around)
全功能控制目标方法
注意
在spring中学习aop,主要的目的就是在SSM框架结合时,利用切面对dao的操作进行事务管理
事物的特点:事物中包含若干语句,要么全都成功提交,要么就回滚至最初状态
写在最后:
初识Spring基本到这里就告一段落,下一篇是与前端结合的Spring MVC.
网盘链接:链接:pan.baidu.com/s/1B1NC5Nsw… 提取码:1234