一、什么是AOP

AOP(Aspect Oriented Programming 面向切面编程) AOP是传统的OOP(Object Oriented Programming 面向对象编程)的补充,添加了一些更为完善的功能,和OOP并没有什么根本上的冲突。解释下传统的切片,如果我们想在一根香蕉

java aop参数名 java中aop_AOP

中间加一段黄瓜,那么我们要怎么做?首先第一步,拿刀从某个部位切开,在将准备好的一段黄瓜放到两段香蕉中间,我们称之为放入。那么联想到我们代码中来;

 

比如我们要给我们的service层增加一段代码,用来计算我们业务层某个功能的性能,首先我们可以直接在代码中添加一些需求代码,但是想一下,如果是测试环境,而且是功能模块不多的情况下我们才能用自己手动添加代码来实现,生产环境如果也是这样搞,那么就太耗时间了,万一你leader说,小李啊,来再把这些功能去掉把。。。艹。显然如果使用手动往里面写代码是不现实的。所有我们要用到AOP。和往香蕉里面添加黄瓜一样,我们可以将service层的代码切开(这里专业术语叫“切入点”),然后将我们计算性能的代码塞进去(这里专业术语叫“织入”),那么我们想用的时候,添加切入点,不想用的时候,直接删掉,简直不要太方便。

  其实我们不仅可以用AOP来实现计算性能,还有一些,记录日志、控制事务,等等......

二、专业术语解释

通知(advice):我们也可以称之为额外功能,比如添加计算某个模块的性能、日志、事务;

切入点(pointcut):我们用来增加通知的连接点,通俗点就是,我们放置额外功能的地方;

切面(aspect):我们放置的通知的点所连接成的一个几何图形所形成的一个面,就叫切面;

织入(weave):将额外功能放到某个功能上,就叫织入;

三、代理模式

1、静态代理

  所谓代理,用我们现实中的例子来说就是,代理就是明星的经纪人。明星的任务就是演戏、唱歌、上综艺节目、参加公益活动了,这之类的。明星的任务就是做就行了,至于其他的,全交给经纪人处理,这里经纪人是代理。联想到我们的代码中,比如有个xxxService接口还有一个xxxServiceImpl接口的实现类,还有一个proxy代理,那么实现类就是明星,proxy就是经理人,实现类和proxy都要实现xxxService接口,因为明星是不对外沟通演出的事情的,所以要经纪人知道这个明星都是可以做什么,只有实现接口,在proxy中才会有接口中的一些功能。

  这样做有个缺点,就是我们有一个实现类,就要添加一个代理,代码需要写的太多了,以至于静态代理几乎都不用。。。。;

2、动态代理

  在静态代理的基础上我们不用在手写代理类了,直接由程序自动生成,这个代理类我们看不到的,这个代码也不会出现在我们的程序中,所以相对于静态代理来讲,我们可以省很多的代码(这里怎么做动态代理就不一一介绍了,大致的就是,定义目标类,将目标类交给Spring管理也就是配置成bean对象,然后创建额外功能类,也是将此交给Spring管理,在后面,创建切入点,最后织入);

其实代理模式就是基于AOP实现的,所有在这里说了一下代理模式。

Spring AOP的东西其实是有很多很多的,我只是自己稍微总结了一下,希望能帮到看到这篇文章的兄弟!!