Spring框架-AOP理解

Spring作为JAVA开发的必不可少的框架,其中关于它说的最多的就是DI,IOC,AOP。简单的谈谈我对Spring中AOP的理解。

Spring-AOP又被亲切的称之为面向切面编程,在关于AOP百度百科中写道,它是对于OOP的一种补充完善,OOP是面向对象,让我们在开发过程中能够用对象的结构形式去写代码,但是OOP写出来的代码结构往往是纵向的,如一个类需要用到另一个类的东西,那么就要在当前类引入另一个类的对象,就如一根绳上的蚂蚱,一层一层的往下,是从头到尾的竖着的一串。而OOP就是对这种情况做了补充,满足了横向的需求,现在想想Aspect(切面)这个词用的很是到位。最好是什么情况下使用 AOP呢?就是在你要写的代码和业务逻辑代码没有关系,但是又不可缺少的。最常见的就是日志和事务了。日志很好理解,每一个重要的方法都需要记录在日志,try的时候也需要记录日志,但是日志这个功能又和程序当前执行的代码逻辑没有关系,这个时候用AOP就是非常适合了。

在对面相切面有了一定了解之后,就谈谈AOP实现。整个AOP中最主要的几点需要记住即可、

       1.切面(Aspect)   就是一个类用注解@Aspect表明,在使用@Component放到容器里即可

       2.连接点(JoinPoint) 就是方法的调用拦截

       3.通知(Advice)  执行增强的方法

       4.切入点(Pointcut) 设置条件,术语叫切入点表达式

上面重要中的重要只有通知和切入点表达式,先说一下通知,用通俗的话讲就是你在原来的方法的基础上又添加了别的代码,想增强一下功能的方法就是通知。既然通知是方法,那么这个方法什么时候执行呢?这就涉及到了切入点表达式,在项目中你会写切入点表达式,只要满足了这个切入点表达式,然后就会执行通知的方法。随之而来的就是通知的类型了,有五种,分别是之前(before),之后(after),出现异常(afterThrower),正常之后(afterReturning),环绕(Around)。前四种很好理解,就是在满足了切入点表达式之后的顺序,是之前之后还是这个方法出现异常运行还是程序一切正常时候运行,最常用的是第五种,环绕。环绕是在要执行方法的前面和后面去执行。在环绕通知时候,方法的参数必须有ProceedingJoinPoint对象,对象.proceed()就是执行原先方法。

AOP另一个点就是事务的实现,在Spring中事务分为了两种编程式事务和声明式事务,编程式事务是用Transaction Template手动去管理的,开发中用的不多,最多的还是声明式事务。可以在xml中配置也可以直接写一个注解@Transactional.

在后面需要了解的就是springAOP中的事务传播

1.required(要求)  当前运行有线程就加入,如果没有就创建一个新的线程使用

2.supports(支持)  当前运行如果有线程就加入使用,没有线程的话,就算了。

3.mendatory(强制)当前运行程序必须得有线程。没有就直接报错抛出异常

4.required_new 当前运行有线程,挂起,新创建一个线程投入。

5.not_supported  用非事务的方式执行,有事务不行,必须是无事务才能运行

6.never(从来没有)不可以出现事务,出现了就报错

7.nested(嵌套)有事务,嵌入。没有事务,自己创建,于父事务并行运行。

别的很好理解,就是nested嵌套事务这不是很好懂,看了一个大佬分享的,我觉得很形象,借用下。

事务就用转账来举例子,A用户下面有两个账号,B用户下面有两个账号,如果A转钱给B是一级事务的话,那么从A的随意两个账号中转出100元到B用户两个随意的账号下就是二级事务。这里就可以使用到了nested事务。嵌套就很形象了。

猜你喜欢

转载自blog.csdn.net/jack_user_admin/article/details/87624892
今日推荐