AOP面向切面编程
AOP面向切面编程 ,使用预编译和动态代理的方式,使用程序可以统一维护的一种技术
作用:可以将业务逻辑之间进行隔离,降低耦合度,使得开发维护方便
OOP是程序各层之间的整体设计
AOP是针对业务逻辑处理过程中某个具体的步骤进行处理
AOP为程序带来什么好处?
可以将一些公共的,重复出现的非业务代码进行提取,然后用动态代理的方式,为业务代码横切添加额外提取的功能,而且不需要显示的在业务代码中调用,可以通过一个代理对象,来帮我们调用这些抽取出来的方法
通过配置 告诉代理 在执行哪个方法时,帮助我们动态调用某个额外的方法
基本概念
连接点:类中可以被增强的方法
切入点:类中实际被增强的方法
通知:在连接点上要做的事情
切面:把通知添加到连接点的整个过程
目标:要增的方法所在的类
代理:(淡化框架的内部实现好了的)配置完成后,为目标对象创建一个代理对象
首先提取通知要增强的功能
发现切入点
配置
aop底层是java设计模式中的动态代理模式
AOP不是spring框架特有的技术,spring框架应用这一技术思想进行封装
spring中是集成Aspect J这样的一个AOP框架
spring数据访问模块的事务管理功能
事务:属于数据库功能,事务可以看做是由对数据库若干操作组成的一个单元(一个整体)
在业务代码执行时,有时一个业务操作需要向数据库发送多条sql,多条sql属于同一个业务的,要求是一个整体,要么都执行成功,要么都不成功
举例:转账,网购
事务特性:原子性、隔离性、持久性、一致性
数据库事务管理就是在你将这若干操作执行完成后,需要对事务进行提交,数据库对数据进行操作,最终达到持久
数据库事务重要性,增删改操作必须在事务管理(没有问题提交,有问题不能提交)中进行
spring事务管理 spring代理我们的程序提交事务
spring中的事务管理有两种形式:
1.编程式事务:需要在代码中显示的提交事务的 注入private TransactionTemplate;
2.声明式事务:
有两种实现方式:
(1)在xml中配置 (需要大量的配置,为需要在事务管理中的方法增强功能)
(2)注解方式实现 transactionTemplate;
怎么管理? 提供DataSourceTransaction Manager实现事务提交
管理实现原理 AOP代理 静态代理 动态代理 jdk代理 反射实现 cglib代理
@Transactional 注解标签可以作用在类和方法上
作用在类上,表示此类中所有的方法都会添加事务增强功能
作用在某个方法上,表示此方法添加事务增强功能
声明式事务失效场景:
1.同一个类中方法调用,导致声明式事务失效(在自己类中调用,就是普通方法调用,不会走代理的环绕通知)
2.将@Transactional应用在非public修饰的方法上
3.注解@Transactional用在的类非spring容器管理的bean
4.@Transactional注解事务传播行为设置错误
5.异常被catch捕获导致@Transactional失效
@Transactional (rollbackFor=RuntimeException) 默认出现运行时异常时不提交 可修改rollbackFor=Exception.class 对所有异常都不提交
6.数据库引擎不支持事务