Spring学习
第一次学习
1.spring框架,作为容器,整合框架,用来管理不同框架中的对象,增加层与层之间的粘合度
2.spring环境搭建,首先创建一个类,例如user,通过配置文件配置的方法,把这个类的对象交给spring管理,配置文件写法:
然后创建测试demo:
这样就实现了一次spring注册对象到取用对象的过程。
3.spring IOC/DI:IOC——inverse of control 反转控制,将我们创建对象的方式反转。
DI——dependency injection 依赖注入(IOC思想需要DI做支持)
4.spring BeanFactory接口:是spring最原始的接口。特点是每次获得对象时才会创建对象。
5.spring配置详解之spring三种对象创建方式:
第一种方式——空参构造创建(常用)
配置方式如图:
单元测试方式如图:
第二种方式——静态工厂调用创建
配置方式如图:单元测试方式如图:
第三种方式——实例工厂调用创建
配置方式如图:
实例工厂调用与静态工厂调用的区别在于,实例工厂的构造方法不是静态的,所以在调用构造方法时不能直接用类调用,必须先构造工厂的对象,然后通过对象调用工厂的构造方法。
6.spring配置详解之scope属性:
Scope属性包括 (1)singleton(默认值)表示对象为单例对象
(2)prototype多例原形,被标识为多例的对象只有在获得时才会创建,并且每次创建的都是新的对象
(3)request web环境下,对象与request生命周期一致
(4)session web环境下,对象与session生命周期一致
7. spring配置详解之生命周期属性:
配置一个方法作为生命周期初始化方法(innit),spring会在对象创建之后立即调用
配置一个方法作为生命周期销毁方法(destory),spring会在关闭并销毁所有容器中的对象前调用这个方法
8.spring属性注入:
(1)set注入:配置方式如下
注入对象属性:
(2)构造函数注入:
其中,name属性表示的是构造函数的参数名,value表示的是参数的值,ref表示的是引用对象的名字(在配置文件中的名字),index是索引,表示参数的位置,type表示参数的类型。
第二次学习
1. 使用注解配置spring:
步骤一,为主配置文件导入新的命名空间(约束)
步骤二,开启使用注解代替配置<context:component-scan base-package=””>标签表示自动扫描指定的基础包,看有没有注解。如果该包中有子包,那么子包也会扫描。
步骤三,在类中使用注解。
2.将对象注册到容器
效果和@component一样,但是可以显示这个类属于哪一层
@scope注解可以指定对象的作用范围。
3.值类型注入:通过反射的Field赋值(破坏了封装性)
通过set方法赋值
复杂注入,把car对象注入到user对象中
(1)自动装配(两个注解搭配使用)
(2)手动注入
初始化和销毁方法的注入:
4.创建容器
第三次学习 spring中的AOP:
1.AOP思想:横向重复,纵向抽取
2.spring能够为容器中管理的对象生成动态代理
3.AOP名词:joinpoint连接点—目标对象中所有可以增强的方法
Pointcut切入点—目标对象中已经增强的方法
Advice(通知/增强)--增强的代码
Target(目标对象)--被代理的对象
Weaving织入—将通知应用到切入点的过程
Proxy代理—将通知织入到目标对象之后,形成代理
Aspect切面—切入点+通知
4.AOP配置准备:
- 导包(4+2+2+2)
- 准备目标对象
- 准备通知
- 将通知织入目标对象
第四次学习
一、spring整合JDBC
1.spring中提供了一个可以操作数据库的对象,对象封装了jdbc技术
(1)JDBCTemplate JDBC模板对象:
操作如下,首先准备数据库连接池,然后创建JDBC模板对象,通过模板对象获取连接池资源,然后编写sql语句并调用模板对象的update()方法执行sql语句。
(2)将对数据库的相关操作配置到spring中
首先创建一个Dao接口和该接口的实现类,在实现类中使用JDBC模板对象的众多方法,实现sql语句。
然后再配置文件中依次配置连接池对象,JDBC模板对象,Dao实现类对象,三者的依赖关系如下,Dao实现类对象依赖JDBC模板对象,JDBC模板对象依赖连接池对象。
将连接池放入spring:
将JDBCTemplate对象放入连接池:
将Dao实现类对象放入连接池:
(3)读取properties配置:在将连接池对象放入spring中,除了直接用bean标签配置,还可以通过读取db.properties文件配置。db.properties文件如图:
注意:每一个属性的前面要加jdbc.前缀。避免和数据库中的关键字冲突。
db.properties文件写好后,要在主配置文件中,指定读取db.properties文件。
同时,要修改主配置文件:
二、spring的事务管理
1.什么是事务?
(1)事务特性:(ACID)
1、原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
2、一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
3、隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
4、持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
(2)事务并发问题:
1、脏读(dirty read):一个事务读取了另一个事务尚未提交的数据。
2、幻读(phantom read):一个事务的操作导致另一个事务前后两次读取到不同的数据。
3、不可重复读(no-repeatable read):一个事务的操作导致另一个事务前后两次读取到不同的数据。
4、第一类丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖。
5、第二类丢失更新:这是不可重复读中的特例,一个事务覆盖另一个事务已提交的更新数据。
(3)事务的隔离级别
1.读未提交
2.读已提交
4.可重复读
8.串行化
2.spring封装了事务管理代码
(1)事务操作:打开事务的代码,提交事务的代码,回滚事务的代码
(2)事务操作对象:因为在不同平台,操作事务的代码各不相同,spring提供了一个接口——PlatformTransactionManager接口。根据不同的平台创建不同的实现类如:DataSourceTransactionManager,HibernateTransactionManager。注意:在spring事务管理中最核心的对象就是TransactionManager对象。
(3)事务传播行为:日常开发基本只用第一种方式。
3.在spring中加事务
Spring管理事务的三种方式:编码式,xml配置(aop),注解配置。
(1)编码式(缺点:对每个需要事务的类挨个添加事务):将核心事务管理器配置到spring容器中(事务核心管理器对象依赖于连接池对象)。
创建事务模板对象transactionTemlate对象(该对象依赖于事务核心管理器对象)。
(2)xml配置(aop):首先需要导入jar包,然后在xml配置文件中导入新的约束
四个约束的作用,beans:最基本
Context:读取properties
Aop:配置aop
Tx:配置事务通知。
接下来就要配置通知:
属性name中的“xxx*”表示的意思是,只要开头为Xxx的方法名都使用这一条事务模式。
再接下来通过aop将事务通知织入到目标对象中:
(3)注解配置:同样需要导包,引入新的约束。
开启使用注解管理aop事务:
然后在方法前配置注解
如果将注解配置在类前面,那么整个类中的方法都会按照注解中的事务要求执行。