Spring中的IOC和AOP;
ioc 控制反转
将对象的实例化过程交给SpringIOC组件,不用程序员手动去new对象,
引入IOC可以让我们更加关注业务逻辑,IOC实际就是解析XML或者通过知足接反射机制加载对应的类。
aop 面向切面编程
将传统程序执行过程看做纵向执行的过程,
每个方法当做一个点,基于这些点做增强处理,形成了横向的切面,
包含原有方法和增强方法,不改变原有的代码结构,添加额外功能。
将常用的功能【事务管理,日志管理,权限管理,打印,缓存,异常...】隔离,实现高内聚低耦合,便于后期维护。
SpringAop和IOC的实现原理
AOP:面向切面编程
在不影响当前方法的情况下,对方法的前后进行增强和扩展。
比如 SpringMvc 的拦截器,Spring 中的事务处理都是通过 AOP 实现的。
底层是通过动态代理实现的(jdk 自带的动态代理,Cglib 动态代理)。
IOC:控制反转
把对象交给 Spring 来管理,防止重复造轮子,降低系统的耦合性,提高项目的开发效率。底层是通过反射实现的。
Spring事务的传播机制
事务传播行为就是多个事务方法相互地欧昂,事务如何在这些方法见传播,spring支持7种事务传播行为: 1.Required: 如果当前有事务就执行当前事务,如果没有就创建一个事务 2.Supports: 支持当前事务,如果当前没有事务,就不执行事务 3. PROPAGATION_MANDATORY: 支持当前事务,如果当前没有事务,就抛出异常。 4. PROPAGATION_REQUIRES_NEW: 新建事务,如果当前存在事务,把当前事务挂起。 5. PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 6. PROPAGATION_NEVER: 以非事务方式执行,如果当前存在事务,则抛出异常。 7. PROPAGATION_NESTED: 支持当前事务,新增Savepoint点,与当前事务同步提交或回滚。
不考虑事务隔离性会产生的3个问题
1.脏读: 当一个事务正在访问数据,并且对数据进行了修改,而这种数据还没有提交到数据库,
这时,有另外一个事务访问数据库,并且使用了这个数据,这个数据肯定是不正确的,
2不可重复读: 就是一个事务在多次读取一个数据时,另一个事务访问同一个数据,
那么第一个事务读取的两次数据,因为第二个事务的修改,造成第一个事务两次读到的数据不一致。
3.幻读: 一个事务先后读取一个范围的记录,但两次读取的纪录数不同,
我们称之为幻象读(两次执行同一条 select 语句会出现不同的结果,
第二次读会增加一数据行,并没有说这两次执行是在同一个事务中)
事务的隔离级别
Read uncommitted:是最低的事务隔离级别,允许另一个事务可以看到这个事务未提交的事务,加入到事务中。
Read committed: 一个事务提交后才能被另外一个事务读取数据库,另外一个事务不能读取该未提交的数据
Repeatable read: 保证一个事务不能被另外一个事务读取未提交的数据之外还避免了不可重复读
Serializable: 事务被处理为顺序执行
Spring框架的优点
1、非侵入式设计 Spring是一种非侵入式(non-invasive)框架,它可以使应用程序代码对框架的依赖最小化。
2、方便解耦、简化开发 Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护工作都交给Spring容器的管理,
大大的降低了组件之间的耦合性。
3、支持AOP Spring提供了对AOP的支持,它允许将一些通用任务,如安全、事物、日志等进行集中式处理,
从而提高了程序的复用性。
4、支持声明式事务处 只需要通过配置就可以完成对事物的管理,而无须手动编程。
5、方便程序的测试 Spring提供了对Junit4的支持,可以通过注解方便的测试Spring程序。
6、方便集成各种优秀框架 Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架
(如Struts、Hibernate、MyBatis、Quartz等)的直接支持。
Spring的事务怎么进行管理的
管理事务的方式有5中,一般是通过AOP来管理事务,就是把代码纵向看成
纵向的有序的,然后通过AOP去管理事务,就好比增删改的时候需要开启一个事务,
我们给他配置一个required,就是有事务就去执行事务,没有事务就创建一个事务
像查询的时候 不需要事务,就给他分配一个supports,就是有事务就执行事务,没事务就不执行
1、非侵入式设计
Spring是一种非侵入式(non-invasive)框架,它可以使应用程序代码对框架的依赖最小化。
2、方便解耦、简化开发
Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护工作都交给Spring容器的管理,大大的降低了组件之间的耦合性。
3、支持AOP
Spring提供了对AOP的支持,它允许将一些通用任务,如安全、事物、日志等进行集中式处理,从而提高了程序的复用性。
4、支持声明式事务处
只需要通过配置就可以完成对事物的管理,而无须手动编程。
5、方便程序的测试
Spring提供了对Junit4的支持,可以通过注解方便的测试Spring程序。
6、方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如Struts、Hibernate、MyBatis、Quartz等)的直接支持。