目录,更新ing,学习Java的点滴记录
目录放在这里太长了,附目录链接大家可以自由选择查看--------Java学习目录
Spring知识
一丶SpringIOC初步认识↓↓↓
第一篇---->初识Spring
二丶SpringIOC深入↓↓↓
第二篇---->深入SpringIoC容器(一)
第三篇---->深入SpringIoC容器(二)
三丶装配SpringBean↓↓↓
第四篇---->依赖注入的方式
第五篇---->基于xml装配Bean
第六篇---->基于注解装配Bean
第七篇---->Spring Bean之间的关系
第八篇---->SpringBean的作用域
第九篇---->Spring 加载属性(properties)文件
第十篇---->Spring表达式(SpEL)
第十一篇---->Spring在xml中配置组件扫描
四丶面向切面编程↓↓↓
第十二篇—>认识SpringAOP及底层原理
第十三篇—>使用@AspectJ注解开发AOP
第十四篇—>使用xml配置开发AOP
五丶Spring中数据库编程↓↓↓
第十五篇—>数据库编程JdbcTemplate
六丶Spring事务管理↓↓↓
第十六篇—>Spring事务管理初识
第十七篇—>编程式事务和声明式事务
第十八篇—>事务ACID特性
第十九篇—>事务传播行为
第二十篇—>事务隔离级别
一丶Spring框架初识
- 说明:
第一部分前两节涉及到Spring的代码大家看看就可以,如果是初学者的话,在第一部分第4节HelloWorld会以一个项目引出,让大家先认识一下Spring的基本项目,详细内容在第二部分会超详细解释
开发工具:IDEA - Spring框架是Java
应用最广
的框架.它的成功来源于理念,而不是技术本身
.它的理念包括IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)
1 Spring Ioc简介
- IoC是一个
容器
,在Spring中,它认为所有的Java资源都是Java Bean,容器的目标就是管理这些Bean和它们之间的关系
.所以在SpringIoC里面装载的各种Bean,也可以理解为Java的各种资源,包括Java Bean的创建,事件,行为等,它们由IoC容器管理.除此之外,各个Java Bean之间会存在一定的依赖关系,比如学校依赖于学生和老师组成的,假设学生和老师都是Java Bean,那么显然二者之间形成了依赖关系,老师和学生有教育和被教育的关系.这些Spring IoC容器都可以对其管理.只是Spring IoC管理对象和其依赖关系,采用的不是人为主动的创建
,而是由Spring IoC自己通过描述创建
,也就是说Spring是依靠描述来完成对象的创建及其依赖关系的. - 比如汽车,将汽车类定义为一个接口,假设有两类汽车–电动汽车和燃油汽车,如下图
- 使用者在使用汽车出行的时候,有两种汽车可以选择,具体该怎么选择呢?建设我们现在要使用电动汽车出行
- 使用Car car = new ElectricVehicle();后,接口Car就和具体类ElectricVehicle绑定在一起了(多态的展现),但是
弊端显而易见
:如果要使用其他类型汽车出行,比如这里的燃油汽车,就需要修改代码了.这种情况Socket接口与其实现类ElectricVehicle耦合了,如果将来不用电动汽车了,而要使用燃油汽车,那么代码就要做如下修改:
- 如果将来会产生一种更加高效的新能源汽车,岂不是还要进行修改吗?在互联网的大项目中,如果要对这样类似的代码进行不断修改,那么对于整个系统的可靠性可是非常危险的事情,
Spring IoC可以解决这个问题
. - 首先,我们不用new的方式创建对象,而是
使用配置的方式
,然后让Spring IoC容器自己通过配置去找对应的汽车类.用一段xml描述汽车和用户引用电动汽车,如下图:
- 在该xml配置文件中,只需要把配置切换为:
- 这样切换后,就可以实现往用户中注入燃油汽车,切换汽车的实现类非常方便,这个时候汽车Car接口就不依赖任何的汽车,而通过配置进行切换
- 上图中配置信息是"我要电动汽车",就相当于xml文件中进行了用户和汽车的依赖关系配置,这时Spring IoC就只会拿到电动汽车,然后通过汽车接口注入给使用者,提供给使用者使用.换句话说,这时一种
被动行为
,而需要的资源(Bean)通过描述信息就可以得到,其中的控制权在Spring IoC容器中
,它会根据描述找到使用者需要的资源,这就是控制反转的含义
. - 好处是Car接口不再依赖于某个特定的实现类,需要使用某个实现类时我们通过书写配置信息就可以完成了.这样想修改或者加入其它资源就可以通过配置来完成,不再需要再用new关键字进行创建对象,依赖关系也可以通过配置完成,从而完全可以
即插即拔
地管理它们之间的关系. 你不需要主动创建或者去寻找资源,只要向Spring IoC容器描述所需资源,Spring IoC自己会找到你所需要的资源,这就是Spring IoC的理念
.这样做就将Bean之间的依赖关系解耦了,更容易写出结构清晰的程序.除此之外,Spring IoC还提供对Java Bean生命周期的管理,可以延迟加载,可以在其生命周期内定义一些行为等,更加方便有效的使用和管理Java资源,这就是Spring IoC的魅力.
2 Spring AOP
- IoC的目标就是为了管理Bean,而
Bean是Java面向对象(OOP)的基础设计
,比如声明一个用户类,汽车类都是基于面向对象的概念. - 有些情况下面向对象是没有办法处理的.比如,生产部门的订单,生产部门,财务部门三者符合OOP的设计理念.订单发出,提交给生产部门去审批,生产部门审批通过,然后通知财务部门准备付款,但是财务部门发现订单的价格超支了,需要取消订单.显然取消订单这件事已经不只是影响财务部门了,还会影响生产部门之前所做的审批,需要将它们作废.我们把预算超支这个条件
称为切面
,它影响了订单,生产部门和财务部门3个OOP对象.在现实中,这样的切面条件跨越了3个甚至更多的对象,并且影响了它们的协作.所以只用OOP并不完善,还需要面向切面的编程,通过它去管理在切面上的某些对象之间的协作.
- 上图中,实线是订单提交流程,虚线是订单驳回流程,影响它们的条件是预算超支,这是一个
切面条件
Spring AOP常用于数据库事务的编程
,很多情况如同上面的例子,做完第一步数据库更新后,不知道下一步是否会成功,如果下一步失败,会使用数据库事务的回滚功能去回滚事务,使得第一步的数据库更新也作废.在Spring AOP实现的数据库事务管理中,是以异常
作为消息的.在默认情况下(可以通过Spring配置修改),只要Spring接收到了异常信息,它就会将数据库事务回滚,从而保证数据的一致性.这样我们就知道在Spring的事务管理中只要让它接收到异常信息,它就会回滚事务,而不需要通过代码来实现这个过程.下面用一段伪代码来进行说明,如下:
- 在上述代码中,我们完全看不到操作数据库的代码,也没有复杂的try-catch-finally语句.在实际中,Spring AOP编程也是如此,这些东西都被Spring屏蔽了,不需要关注它,只需要关注业务代码,知道只要发生了异常,Spring回滚事务就足够了.事务当然是很复杂的,但是Spring提供了隔离级别和传播行为去控制它们,有了Spring的这些封装,开发人员就可以减少很多的代码和不必要的麻烦.
3 一些准备资源
- Spring官网:https://spring.io/projects/spring-framework
- 官方各版本jar包下载地址:https://repo.spring.io/libs-release-local/org/springframework/spring/,
关于jar包中的目录结构解释会在第二部分开头说明
- 官方源码各版本源码包下载地址:https://github.com/spring-projects/spring-framework/tags
后续案例中使用到的包,如果有其他添加会进行说明
,
下载方式:网盘链接(版本为4.1.6,包含日志包)-----链接:链接:https://pan.baidu.com/s/1BB1XSylXzZ8_9pj_zyG9hA 提取码:bvby
如果感觉网盘下载太慢时,可以使用上面提供的jar包和源码包的网址下载,下面给出下载jar包的示例,源码包类似,但是需要自己额外下载一个Spring依赖的日志包commons-logging,再提供一个网盘链接,这个只包含这个jar包,内容很小,下载很快–链接:https://pan.baidu.com/s/1ZRFrMs4XhzLggngU71lX6w 提取码:5vjj
4 HelloWorld项目
- 创建项目–这里我创建一个空的Project,然后以此为基础对每一个Spring的介绍创建一个新的Module来写代码
- 添加jar包到项目环境中—按常规惯例,创建一个lib文件夹,放置jar包然后添加为library
在下载的jar包的文件目录下,找到下面五个jar包已经Spring依赖的commons-logging.jar包
复制这5个jar包到lib目录下,然后右键选中lib,选择add as library
- 在src下创建一个Spring的全局配置文件:
如果你创建的配置文件出现了这样的提示信息,就说明该配置文件并没有关联到项目中,需要进行处理,操作不再赘述,详情见新建Spring全局配置文件出错 - 创建HelloWorld类
- 在全局配置文件中配置bean
- 创建测试类,进行测试
这里需要强调一点,在创建SpringIOC容器的时候指定的配置文件是applicationContext.xml,其实这个文件并不一定非得叫这个名字,也就是说我们可以在不同情况下,创建多个文件名不同的文件,只需要在代码中创建SpringIOC容器时指定对应文件即可
特别的,如果在最后运行代码时出现了:Error:java: 无效的源发行版: 12
的错误,解决方案—>Error.java:12解决 通过这样一个简单的项目,你可能对Spring的最基本的配置有了一点点认识