spring_aop

AOP (Aspect Orient Programming),直译过来就是 面向切面(方面)编程。AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。

AOP编程可不是Spring独有的,Spring只是支持AOP编程的框架之一。

AOP分两类,一类可以对方法的参数进行拦截,一类是对方法进行拦截,SpringAOP属于后 者,所以Sprin

1.1 基础案例说明

为了更好说明,我们接下来,要讲解的知识点,我们以一个常见的例子来说明
我们以数据库的操作为例来说明:

  • 获取连接对象
  • 执行SQL(核心业务代码)
  • 如果有异常,回滚事务,无异常则提交事务
  • 关闭连接
  • g的AOP是属于方法级

2. AOP术语

  • 连接点(Joinpoint) 程序执行的某个特定位置,如某个方法调用前,调用后,方法抛出异常后,这些代码中的特定点称为连接点。简单来说,就是在哪加入你的逻辑增强连接点表示具体要拦截的方法,上面切点是定义一个范围,而连接点是具体到某个方法
  • 切点(PointCut) 每个程序的连接点有多个,如何定位到某个感兴趣的连接点,就需要通过切点来定位。比如,连接点--数据库的记录,切点--查询条件
  • 增强(Advice) 增强是织入到目标类连接点上的一段程序代码。在Spring中,像BeforeAdvice等还带有方位信息
  • 目标对象(Target) 需要被加强的业务对象
  • 织入(Weaving) 织入就是将增强添加到对目标类具体连接点上的过程。
    织入是一个形象的说法,具体来说,就是生成代理对象并将切面内容融入到业务流程的过程。
  • 代理类(Proxy) 一个类被AOP织入增强后,就产生了一个代理类。
  • 切面(Aspect) 切面由切点和增强组成,它既包括了横切逻辑的定义,也包括了连接点的定义,SpringAOP就是将切面所定义的横切逻辑织入到切面所制定的连接点中。
    比如上文讨论的数据库事务,这个数据库事务代码贯穿了我们的整个代码,我们就可以这个叫做切面。 SpringAOP将切面定义的内容织入到我们的代码中,从而实现前后的控制逻辑。 比如我们常写的拦截器Interceptor,这就是一个切面类

    2.1 图解

spring_aop_第1张图片

 

3. Spring概述

1,AOP编程可不是Spring独有的,Spring只是支持AOP编程的框架之一,这一点非常重要,切勿搞反了关系。
2,AOP分两类,一类可以对方法的参数进行拦截,一类是对方法进行拦截,SpringAOP属于后者,所以Spring的AOP是属于方法级的

@Aspect

public class TransactionAspect {

@Before ("execution(* com. hgz. service. impl.UserServiceImpl.*(..))")public void before () {

System. out. println("前置增强,比如创建连接对象....");
}

@After ("execution(* com. hgz. service. . impl. UserServiceImpl.*(..))")public void after() {

System. out. println("后置增强,比如关闭连接对象....") ;
}

@AfterReturning ("execution(* com. hgz . service . impl . UserServiceImpl.*(..))")public void afterReturning() {

System. out. println ("返回通知,比如提交事务....") ;
}
@AfterThrowing ("execution(* com. hgz. service . impl.UserServiceImpl.*(..))")public void afte rThrowing() {

System. out. println ("异常通知,比如回滚事务....") ;
}

@Before: 标识一个前置增强方法,相当于BeforeAdvice的功能.
@After: final增强,不管是抛出异常或者正常退出都会执行.
@AfterReturning: 后置增强,似于AfterReturningAdvice, 方法正常退出时执行.
@AfterThrowing: 异常抛出增强,相当于ThrowsAdvice.
@Around: 环绕增强,相当于MethodInterceptor.
execution:用于匹配方法执行的连接点;
 

你可能感兴趣的:(新手,java,开发语言)