温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何进行AOP编程原理的解析

发布时间:2022-01-18 09:30:47 来源:亿速云 阅读:158 作者:柒染 栏目:大数据

如何进行AOP编程原理的解析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

AOP是一种编程思想,一套规范。

软件开发经历了面向过程编程时代,以C语言为代表,之后是面向对象编程时代,以Java语言为代表。

在21世纪大牛们又提出了一种新的编程思想面向方面编程,即AOP理念,全称Aspect-Oriented Programming。

发展历史

1997年在面向对象编程大会上Gregor Kiczales等人首次提出了AOP的概念,之后各大公司等分别加入研究。2001年Palo Alto研究中心发布了首个支持AOP的语言AspectJ,同时也是一个规范。

目标定位

在对真实世界抽象的面向对象编程过程中,始终伴随着某写操作的代码无法实现模块化封装,会散落在各个对象中存在,特别是非功能性代码。对于一般的功能开发采取面向对象方式进行抽象是能够很好应付的,但是面向方面(切面)给了一种新的思维方式来考虑编程,能更好的进行全局结构化思考。

所以AOP主要解决两个问题:

  • 代码分散问题,特别是那些非功能性代码。

  • 作为面向对象编程思维的一种补充和完善。

如何进行AOP编程原理的解析

核心知识点

  • 连接点

连接点:join point,程序的一个执行点,如类中的一个方法,方法里面一个代码块。

  • 切入点

切入点:point cut,是一个捕获连接点的代码结构,就是定义一个代码逻辑用来捕获某个连接点的代码。

  • 方面

方面;aspect,是具体被执行的切面逻辑代码,类似于一个类。

  • 通知

通知:advice,是point cut执行的代码,定义在连接点什么时机来执行aspect。

主要运用场景

场景分为2类:

一类是非功能性需求,如日志、异常、安全、事务都可以使用AOP思想编程。

另一类是功能性需求,在原来对象抽象的思维中添加AOP思维,这里是一种结构化思维,在定义类时考虑多个类的切面共性。

如何进行AOP编程原理的解析

主流AOP语言实现

对AOP实现除了AspectJ外,已知的还有JBoss AOP、Spring AOP等。

这里只介绍AspectJ和SpringAOP,重点是他们不同点。

AspcetJ

AspectJ采用静态织入方式进行切面织入原代码,提供独立的编译器把切面和原代码的java文件编织成一个新的class文件。提供了详细的编译日志和调试工具,编译时间长但是运行效率高。

连接点的支持范围:

  • 方法和构造器调用

  • 方法和构造器执行

  • 属性访问

  • 异常处理

  • 类初始化,是static代码块

  • 语法结构

  • 控制流

  • 对象及参数类型

  • 条件测试

关联连接点通知方式:

  • before,连接点执行前运行

  • after,连接点执行后运行

  • around,连接点的整个外侧,整个包住,能够绝的连接点执行和修改上下文环境

Spring AOP

Spring AOP没有完全实现AspectJ语言,它更多的是对Spring framwork进行Aop能力的扩展实现,补全Spring framework的不足并让Aop与Spring framwork融合。

连接点只支持方法拦截调用。

连接点通知方式在aspect的before、after、around的基础上增加throw对异常的触发的拦截。

Spring AOP与Spring IoC体系融合,对于aspect类统一交由Spring beans管理,并且提供ProxyFactoryBean的AOP代理工厂类,还有自动代理的BeanNameAutoProxyCreator和DefaultAdvisorAutoProxyCreator的强大工具。

Spring AOP是动态织入,在运行时完成AOP的aspect代码织入原代码逻辑中。其底层默认采用JDK的动态代理实现AOP代理,当对象没有实现接口时,CGLIB会默认使用。

优缺点

优点:解决代码散乱问题、代码逻辑解偶、易于维护、提供扩展性和可重用性。

缺点:切面越多系统越复杂难懂、工程师学习成本增加(业务不再是线型,变成了跳跃式)

关于如何进行AOP编程原理的解析问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

aop
AI