Java王者之路3

Java编程的基础是面向对象,面向对象的增强(之一)就是AOP—面向切面编程

一、what(相关定义)

1.AOP(Aspect Oriented Programming):在运行/编译时,动态地将代码切入到类的指定方法、指定位置,从而在不改变现有类的封装的前提下,增强现有类核心功能的一种编程方法。而增强的功能通常是无法严格遵照OOP的思想实现的、穿插在各个业务模块中、并且和各个业务模块高度耦合在一起的重复实现的系统功能。并进一步引申为两小点:❶AOP是OOP的补充和增强,从属于OOP,而不是像与POP(面向过程编程)那样分属不同思想

❷具体来说,AOP就是把这些高度耦合在核心业务的功能分门别类并提取出来,封装在一个个Aspect切面中,然后再指定这些切面往核心业务中织入的规则,最后根据规则织入到核心业务中,最终实现系统功能的封装与解耦及组合。

2.Aspect切面:

类似OOP中的class,一个Aspect存放一个系统功能的实现逻辑代码,并且严格不同于业务核心代码,专注于一个横切功能。

3.Joinpoint连接点:程序执行的某个节点,例如被方法被调用前、后,抛出异常时。

4.Pointcut切入点:用于匹配哪些类中的哪些方法的正则表达式,用于定位哪些类的哪些方法需要加入Aspect切面。

5.Advice通知:用于定位在哪个Joinpoint连接点织入Aspect切面.Spring中有五种Advice:❶Before Advice前置通知

❷After Advice后置通知

❸After Return Advice返回后通知

❹Around Advice环绕通知

❺After Throwing Advice抛出异常后通知

6.Introduction引入:添加方法或字段到被通知的类。Spring允许引入新的接口到任何被通知的对象。

7.Target Object目标对象:包含连接点的对象,也被称为被通知或被代理对象。

8.AOP Proxy AOP代理:AOP框架创建的对象,包含通知。在Spring中,AOP代理可以是JDK动态代理或CGLIB代理。

9.Weaving编织:组织方面来创建一个被通知对象。这可以在编译时完成(使用AspectJ编译器),也可以在运行时完成。Spring和其他纯Java AOP框架一样,在运行时完成织入。Spring中AOP代理由Spring的IoC容器负责生成、管理,其依赖关系也由IoC容器负责管理。

二、why(解决的问题)

专业的人做专业的事,对应到OOP上,非逻辑功能的实现就需要专门的面向切片实现,最终达成以下两个目标:

1.减少冗余代码:通常而言,每个业务功能代码最终落地实现,都离不开非业务功能的代码辅助,比如调用日志,异常处理,常规的方法是在每个业务功能代码赘上这些代码。如果应用上面向切面编程,就不用到处编写相同辅助功能的代码,只要一次编写,加上规则配置,就能实现复用的目标。

2.灵活并安全:能够在核心业务代码不改变的前提下,灵活追加非业务性的系统功能,从而轻松达到在面向非业务功能修改时,能够灵活配置系统功能,避免在不使用切面编程时修改的潜在风险。

三、how(如何解决)

1.运行时切面:例如,Spring中的原生自带AOP

2.编译时切面:例如,AspectJ中切面实现方式

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180606G13OW000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券