联系人:石虎 QQ:1224614774 昵称: 嗡嘛呢叭咪哄
QQ群:807236138 群称: iOS 技术交流学习群
QQ群:713799633 群称:iOS技术交流学习群-2
一、AOP概念
AOP全称(Aspect Oriented Programming)面向切片编程的简称
AOP的定义:
AOP通过预编译方式和运行期动态代理实现,在不修改源代码的情况下,给程序动态统一添加功能的一种技术,简称AOP。是spring框架的一个重要内容,是OOP(Object-Oriented Programing,面向对象编程)的衍生模范。
OOP的定义:
OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。
AOP的作用:
利用AOP对业务逻辑的各个部分进行隔离,降低业务逻辑的耦合性,提高程序的可重用型和开发效率。
什么时候用AOP:
比如说你做了一个项目, 要写若干个类 这些类有很多内容都是相通的。
主要用于对同一对象层次的公用行为建模,能够让我们在不影响原有功能的前提下,为软件横向扩展 功能 .例如:日志功能、事物、 数据库操作。
实现AOP的技术,主要分为两大类:
一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;
二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。
AOP的实现方式
通知类型 |
说明 |
前置通知(MethodBeforeAdvice) |
目标方法执行之前调用 |
后置通知(AfterReturningAdvice) |
目标方法执行完成之后调用 |
环绕通知(MethodInterceptor) |
目标方法执行前后都会调用方法,且能增强结果 |
异常处理通知(ThrowsAdvice) |
目标方法出现异常调用 |
AOP使用场景
Authentication 权限 |
Caching 缓存 |
Context passing 内容传递 |
Error handling 错误处理 |
Lazy loading 懒加载 |
Debugging 调试 |
logging, tracing, profiling and monitoring 记录跟踪 优化 校准 |
Performance optimization 性能优化 |
Persistence 持久化 |
Resource pooling 资源池 |
Synchronization 同步 |
Transactions 事务 |
AOP优点:
1、减少重复代码
2、提高开发效率
3、维护方便
AOP缺点:过于复杂;破坏封装
二、AOP相关概念
方面(Aspect):
一个关注点的模块化,这个关注点实现可能另外横切多个对象。事务管理是J2EE应用中一个很好的横切关注点例子。方面用Spring的 Advisor或拦截器实现。
连接点(Joinpoint):
程序执行过程中明确的点,如方法的调用或特定的异常被抛出。
通知(Advice):
在特定的连接点,AOP框架执行的动作。各种类型的通知包括“around”、“before”和“throws”通知。通知类型将在下面讨论。许多AOP框架包括Spring都是以拦截器做通知模型,维护一个“围绕”连接点的拦截器链。Spring中定义了四个advice: BeforeAdvice, AfterAdvice, ThrowAdvice和DynamicIntroductionAdvice
切入点(Pointcut):
指定一个通知将被引发的一系列连接点的集合。AOP框架必须允许开发者指定切入点:例如,使用正则表达式。 Spring定义了Pointcut接口,用来组合MethodMatcher和ClassFilter,可以通过名字很清楚的理解, MethodMatcher是用来检查目标类的方法是否可以被应用此通知,而ClassFilter是用来检查Pointcut是否应该应用到目标类上
引入(Introduction):
添加方法或字段到被通知的类。 Spring允许引入新的接口到任何被通知的对象。例如,你可以使用一个引入使任何对象实现 IsModified接口,来简化缓存。Spring中要使用Introduction, 可有通过DelegatingIntroductionInterceptor来实现通知,通过DefaultIntroductionAdvisor来配置Advice和代理类要实现的接口
目标对象(Target Object):
包含连接点的对象。也被称作被通知或被代理对象。POJO
AOP代理(AOP Proxy):
AOP框架创建的对象,包含通知。 在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。
织入(Weaving):
组装方面来创建一个被通知对象。这可以在编译时完成(例如使用AspectJ编译器),也可以在运行时完成。Spring和其他纯Java AOP框架一样,在运行时完成织入。
谢谢!!!
本账 主要分享我成长过程中的各种心得感悟,包括技术总结, iOS、Swift 和 Mac 相关技术文章、工具资源、参与技术讨论,整理开发技巧、让学习成为一种享受!
参考文章:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!