Aop到底是什么---------最适合新手的文章

什么是aop?

(篇幅)

aop 简介

AOP是Spring框架面向切面的编程思想,AOP采用一种称为“横切”的技术,将涉及多业务流程的通用功能抽取并单独封装,形成独立的切面,在合适的时机将这些切面横向切入到业务流程指定的位置中。

说了一堆概念,什么是AOP? aop就是切面编程,一种范式,可以理解为对类中某种函数方法功能的增强,或者添加函数功能,拦截功能等。

先说一下平常的继承方式,纵向继承

例如定义一个用户类

public clss User
{
  public void safe()     //设置一个保存函数
  {
    System.out.println("save方法执行")//里面只是简单的操作方便理解
  }
  public void delete()   //这里设置一个删除函数
  {
    System.out.println("delete方法执行");
  }
}

什么叫纵向继承 ,就是子类继承父类例如下面,继承了父类后,你可以重写函数,或者是再定义新函数来加强该类的总用,比如你还可以给类加一个查询的功能,这里你也可以理解加强二字,对吧,你函数更牛逼了,可以实现更多功能了

public class UserSon extends User
{
    public void save()     //重写父类方法
    {
     System.out.println("这是子类save方法");
    }
    public void find()   //新增一个查找方法
    {
     System.out.println("这是新定义的find方法");
    }
}

当然上面省略了delete方法,意思就是咱们传统的继承为纵向继承,就是在类中需要增加一种功能时候,然后继承父类,增加功能,创建一个新的方法函数。

aop代理模式

aop 是怎么进行它的操作呢?采用横向抽取机制,也称为代理模式,下面例子方便大家理解,都知道,项目中,一般都会一个类实现多个接口,接口方便管理

下面设置一个接口,是用户类

public interface UserDao()
{
  public void save();         //设置保存函数
  public void delete();       //设置删除函数
}

接口都知道吧,这里就步多讲了。
然后负责人将接口发放下面人员,来实现接口。

public calss UserDaoImpl implements UserDao()
{
  public void save()
  {
   System.out.println("实现保存方法");   //这里将输出语句代替保存操作,方便理解
  }
  public void delete()
  {
   System.out.println("实现删除方法");  //同理
  }
}

实现操作大家都知道,实现了某个接口,必须将其方法都实现,突然,负责人要求再加上用户校验是否正确,你才能使用save 和delete方法,很简单对吧,只要在实现类里面的每个函数调用前设置判断即可。下面为修改后

public calss UserDaoImpl implements UserDao
{
  public void save()
  {
   System.out.println("用户校验")//这里用简单的语句来代替校验操作
   System.out.println("实现保存方法");   //这里将输出语句代替保存操作,方便理解
  }
  public void delete()
  {
   System.out.println("用户校验")//这里用简单的语句来代替校验操作
   System.out.println("实现删除方法");  //同理
  }
}

像上面一样很简单,直接复制粘贴即可,但是当你实现多个接口,接口里又有很多方法呢,如果你都是复制粘贴,麻烦,造成代码冗余,很 傻X,不能够装逼
假设下面情况

public calss UserDaoImpl implements UserDao1,UserDao2,UserDAo3
{
  public void save()
  {
   System.out.println("用户校验")//这里用简单的语句来代替校验操作
   System.out.println("实现保存方法");   //这里将输出语句代替保存操作,方便理解
  }
  public void delete()
  {
   System.out.println("用户校验")//这里用简单的语句来代替校验操作
   System.out.println("实现删除方法");  //同理
  }
  public void find()
  {
   System.out.println("用户校验");    
   System.out.println("实现查找方法"); 
  }
    public void open()
  {
   System.out.println("用户校验");    
   System.out.println("实现打开方法"); 
  }
}

当你遇到上面这种多个方法实现的时候,真会复制粘贴吗?是不是显的很2b。这里aop概念就出来了,aop切向编程,并不像纵向编程,重写才能实现增添功能显得很麻烦,下面就是aop图示
在这里插入图片描述
当然,aop的实现 并不是像上面图一样,只是一个抽象图,就是将你要进行增强的函数,自动放到你产生的代理类中,然后产生的类就是你进行增加功能后的类,也是你原来类的代替品,就相当于上面传统方式的增强。UserDaoImpl类就和UserDaoImplProxy类属于平行的关系。所以称为aop代理模式。

总结

aop概念已经了解,就是横向掏出来函数方法,然后增强代码实现,增加函数功能,然后产生一个代理类。

aop相关术语

还是以那个为例子,要对实现类的功能实现增强,我们是要对save方法进行增强,就是要进行save操作的时候进行校验。

JoinPoint (连接点):就是类中的函数方法都被称为连接点。可以被增强的点,例如下面保存和删除的函数被称为连接点。

Pointcut(切入点):被拦截的点,就是类中你要加强的连接点(函数)我们要加强save方法函数,所以save方法就是切入点

Advice(通知):拦截后要做的事情,就是你要实现加强的操作就是通知,例如要对save方法实现用户校验的操作,那么该操作就叫通知

Target(目标):被增强的类(增强函数属于的类),称为目标。

Weaving(织入):将Advice应用到Target的过程。例如该例,将用户校验应用到该类中的过程

Proxy(代理):该词重中之重。实现增强后的类定义的对象就被称为代理。

Aspect(切面):就是切入点和通知的组合。可以把每个函数看为一个层面,然后把save方法抽取出来做修改。
在这里插入图片描述
这里篇幅过长,AOP具体的实现方法可见下篇文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值