Spring - AOP

AOP(Aspect oriented Programming)

一、AOP是什么?

面向切面编程(对方法功能的扩展不通过修改源码实现,而是在程序运行时动态的植入要增强的功能)https://blog.csdn.net/xjbclz/article/details/52662961
AOP,一个oop的后传,面向切面,一个基于代理模式的机制。

Spring - AOP_第1张图片
image.png

举例子把:说原理很难理解,

吃饭:谁都得吃饭,一个老师类,有吃饭的方法。一个学生类,也得有吃饭的方法。是不是都得实现这个方法?构建一个person类?通过学生老师继承实现这个方法。但是从面向对象的角度来讲,代码应该高内聚低耦合,如果大量的继承方式实现,那就违背了这个思想。

所以通过aop思想实现,其中最具有代表性就是代理模式,通过一个工厂,专门实现吃饭。

有这么一句说法,面向对象是二维空间,而加上了aop,那么就是通过切面角度,增加到三维空间,那么对待一个程序更具有直观性。归根揭底,就是保持高内聚低耦合的业务思想,提高代码的重用性,实现高效率的代码。
AOP几个相关概念

  • 连接点(joinpoint):类中所有可能增强功能的方法称为连接点;
  • 切入点(pointcut):实际增强的方法称为切入点;
  • 增强|通知(advice):扩展的功能称为增强;前置增强后置增强最终增强异常增强
  • 切面(aspect):将增强植入到切入点的过程称为切面(切入点+增强)

二、AOP何时用?

扩展功能:
1. 直接修改源码
2. 做基类(继承)
3. AOP提供的是横向解决方案AOP实现的是核心业务与非核心业务分离,在需要时再动态植入进来(使用的是动态代理模式设计技术)


三、AOP怎么用?

1.AOP原始实现过程

// 第一步:引入约束


// 第二步:注册bean



// 第三步:配制AOP









  
  
    
    
    
    
    
    
    
    
    
    
  




2.基于注解实现AOP(实际开发使用)

// 第一步:引入约束(beanlcontextlaop)


// 第二步:开启组件扫描


// 第三步:启动aop自动代理


// 第四步:标识AOP注解
@ASpect
@Component
public class Loger{
  @Pointcut(value="execution(*cn.lanqiao.aop.anno.EmpDao.add(..))")
  public void pointcut(){}
 //@Before(value="execution(*cn.lanqiao.aop.anno.EmpDao.add(..))")
  @Before(value="pointcut()")
  public void before(){
    System.out.println("前增强");
  }

  //@AfterReturning(value="execution(*cn.1anqiao.aop.anno.EmpDao.add(.…))")
  @AfterReturning(value="pointcut()")
  public void afterReturning(){
    System.out.println("后置增强");
  }
  //@After(value="execution(*cn.lanqiao.aop.anno.EmpDao.add(..))")
   @After(value="pointcut()")
  public void after(){
    System.out.println("最终增强");
  }
 //@Around(value="execution(*cn.lanqiao.aop.anno.EmpDao.add(..))")
  @Around(value="pointcut()")
  public void around(ProceedingJoingoint pjp){
    this.before();
  }
  //调用:add 
  try{
    pjp.proceed();
  }catch(Throwablee){
     this.afterReturning();
  }
}

四、总结(AOP相关注解)

  • @Aspect
  • @Pointcut
  • @Before
  • @AfterReturning
  • @After
  • @Around
  • @AfterThrowing

你可能感兴趣的:(Spring - AOP)