什么是AOP?
Aspect Oriented Programming,装逼的最高境界就是不假思索的说出来这三个词,换成中国话就是面向切面编程,听师姐讲过一次,前几天总结SSH的时候,其中的spring的核心技术就是AOP和IOC,今天就做一个关于AOP的简单小DEMO~,真的是简单到不能再简单啦~~
AOP的哲学
最近总结什么都喜欢用哲学这个词,软件开发其实是非常具有艺术性的工作,数据就是我们的“乐高”,如何将“乐高”完美的组织到一块,让程序易于扩展,应用灵活就要靠程序员高超的技艺了,每个程序员都有自己的编程哲学,而一些神人总结出来的经验就成为了这个行业的哲学,所以我不喜欢“码农”这个词,因为我觉得程序员是这个世界上最有意思的行业,我们玩的不是具体的东西,而是一个个的数据,通过几行命令几行代码,就可以指挥千万条数据乖乖听话,所以说,我们是虚拟世界的创造者,我们是艺术家~
AOP和OOP有什么区别呢??面向对象编程是让把世界拆成一个个具体的对象,我们在将对象抽象成不同的类别,让这些类之间产生联系,从而完成逻辑功能。重点放在实体的属性和行为的抽象封装上,我们的关注点从设计之初就聚焦到了一个个的名词实体上,业务逻辑中有哪些实体?如何将他们的行为属性封装到一起是OOP需要做的
而AOP面向切面编程则是将业务逻辑中的一个切面提取出来,他所面对的是业务逻辑中某个具体的步骤或者阶段,而这个过程是涉及到了很多类的,这些散落在不同类中的相同步骤就构成了一个切面,我们将这个切面抽离出来,只关注这个切面,就是AOP的思想。
AOP的好处,达到了代码的可重用,一旦涉及到需求的改变,我们只需要在切面中做修改,不用去打开个各类再去意义的修改,这样修改了基础代码,就可以影响和他关联的成千上百处的代码~多好!
所以总结来说两者是相辅相成的关系,互相补充和完善~~
AOP使用场景
当我们需要为分散的对象引入公共行为的时候,OOP就歇菜了吧,这个时候就会用到AOP,例如日志功能啦,各种权限验证啦,事务控制啦按and so on.
程序员也有无力的时候,当我们洋洋洒洒的写了上千行代码,每个模块中都包括了:日志+权限,到了尾声,需求变更,需要在权限控制上进行大的变更,这个时候就需要重新去“千千万万”个方法中修改,不敢想象啊,倘若我们在初始的时候将这个切面抽离出来,放置到某个地方统一管理,这样程序员只需要将关注点放到核心代码上,即提高了效率,又使代码变得整洁。日后的维护工作更是非常轻松,因为公共的代码的核心的代码已经分别存放了。
关于AOP的概念
- 方面(Aspect):一个关注点的模块化,这个关注点实现可能另外横切多个对象。
- 连接点(Joinpoint):程序执行过程中明确的点,如方法的调用或特定的异常被抛出
- 通知(Advice):在特定的连接点,AOP框架执行的动作。各种类型的通知包括“around”、“before”和“throws”
- 切入点(Pointcut):制定一个通知被引发的一些列连接点的集合。AOP框架必须允许开发者执行切入点
- 引入(Introduction):添加方法或字段被通知的类。
- 目标对象(Target Object):包含连接点的对象,也被称作通知或代理对象
- AOP代理(AOP Proxy):AOP框架创建的对象,包含通知
- 编织(Weaving):组装方面来创建一个被通知对象。
写在后边
这一篇主要是介绍了AOP的哲学思想,还要一些基础的概念,算是宏观把控吧,下一篇会介绍一个小例子,帮助大家理解~