AOP面向切面编程

目录

AOP面向切面编程

基本概念

spring数据访问模块的事务管理功能


面向切面编程

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.数据库引擎不支持事务

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值