目录
AOP概述
面向切面思想
优点:
核心原理:
使用案例:
AOP 的基本概念
springAOP 实现
AspectJ 中常用的通知
Spring事物管理
数据库事务管理?
spring 事务管理?
Spring中的事物管理分为两种形式:
1、编程式事物管理
2、声明式事务管理
基于注解实现的 spring 事务管理
声明式事务失效场景:
AOP概述
AOP 为 Aspect Oriented Programming (面向切面编程),通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。
面向切面思想
是将程序中 非业务代码(提交事务,打印日志,权限验证,统一异常处理等)提起分离出来,然后在调用业务代码时,通过一个代理对象帮助我们调用这些提取出来的非业务代码,这样在业务代码中,就不用 显示的调用非业务代码。做到业务代码和非业务代码的分离,降低了代码的 耦合度。
面向切面编程:是对面向对象编程的补充延续。
OOP:就是一种战略层面。
AOP:就是一种战术层面。
他们解决的问题是不一样的。
AOP 是 OOP 的延续,是软件开发中的一个热点,是 java 开发中的一个重要内
容。利用 AOP 可以对业务逻辑和非业务逻辑进行隔离,从而使得各部分之间的
耦合度降低,提高程序的可重用性,同时提高了开发的效率。
优点:
面向切面编程的好处就是: 减少重复,降低模块之间的耦合度,专注业务;
核心原理:
使用 动态代理 的方式在执行业务代码的方法前后或者出现异常的时候做加入相关的逻辑.
使用案例:
事务处理:开启事务,关闭事务,出现异常后回滚事务。
权限判断:在执行方法前,判断是否具有权限。
日志:在执行前进行日志处理。
AOP 的基本概念
连接点(Joinpoint): 类中可以被增强(加功能)的方法,这个方法就被称为链接点。切入点(pointcut):类中实际被增强的方法。 类中有很多方法可以被增强,但例如:实际中只有 add 和 update 被增了,那么 add 和 update 方法就被称为切入点(实际实现的链接点)。通知(Advice): 通知是指一个切面在特定的连接点要做的事情(增强的功能)。(通知分为方法执行前通知,方法执行后通知,环绕通知等。)目标(Target): 代理的目标类(连接点和切入点所在的类)。代理(Proxy): 向目标对象应用通知时创建的代理对象。
springAOP 实现
对于 AOP 这种编程思想,很多框架都进行了实现。Spring 就是其中之一, 可以完成面向切面编程。AspectJ 是一个基于 Java 语言的 AOP 框架,它提供了强大的 AOP 功能,且其实现方式更为简捷,使用更为方便, 而且还支持注解式开发。所以,Spring 又 将 AspectJ 的对于 AOP 的实现也引入到了自己的框架中。
AspectJ 中常用的通知
有五种类型:前置通知,后置通知,返回通知,环绕通知,异常通知.
@Before 前置通知:方法执行之前@After 后置通知:方法执行之后,无论是否出现异常@AfterReturnning 返回通知:方法成功执行之后通知,出现异常不执行@AfterThrowing 异常通知:抛出异常之后通知@Around 环绕通知:方法执行前后都有通知
@AfterThrowing 异常通知:抛出异常之后通知。
@Around 环绕通知:方法执行前后都有通知。
Spring事物管理
事物管理本质上是数据库提供的一种管理机制。
数据库事务管理?
数据库事务管理就是对一次数据库操作过程中执行的多条语句进行管理,保
证一次对数据库操作过程中多条 sql 要么都执行成功,要么都不执行,从而确保数
据一致性。
我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步
操作的结合。由于数据操作在顺序执行的过程中,任何一步操作都有可能发生异
常,异常会导致后续操作无法完成,此时由于业务逻辑并未正确的完成,之前成
功操作数据的并不可靠,需要在这种情况下进行回退。
事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操
作都必须成功执行,只要有发生异常就回退到事务开始未进行操作的状态,这些
操作要么都完成,要么都取消,从而保证数据满足一致性的要求。
spring 事务管理?
Spring 事务管理就是 spring 框架对事物提交这一功能进行封装,针对程序中提交事务这部分非业务代码进行分离管理,减轻程序员负担。程序员在业务开发中不需要显示的提价事物。在程序执行没有问题时,提交事务,出现问题时,回滚事务。
Spring中的事物管理分为两种形式:
1、编程式事物管理
在项目中很少使用,这种方式需要在我们代码中需要提交事务或回滚事务时 自己写代码实现。
2、声明式事务管理
建立在 AOP 基础上,本质是对方法前后进行拦截,所以声明式事务是方法级别的。
声明事物底层使用了AOP思想,可以为方法添加事物功能。
基于注解实现的 spring 事务管理
Spring 框架,提供事物管理实现类是 DataSourceTransactionManager.
配置事物管理器以及添加注解方式
然后在类或方法上使用@Transactional 标签即可。
要么全部执行,要不全部不执行。
@Transactional 可以添加在方法上,也可以添加到关上面,。如果添加到类上面,此类中所有的方法都在spring事务管理中进行。
声明式事务失效场景:
1.@Transactional用在非public方法上2.方法中的异常被catch捕获了,认为方法没有异常3.方法中出现编译期异常,还是会提交事务 可以将rollbackFor = Exception.class这样所有的异常都会回滚。4.数据库引擎不支持事务,mysql中只有innodb引擎支持事务的。
@持续更新ing.....