ObjC中的AOP--面向切面编程

简介:

一、示例概述

本篇博客的示例比较简单,其实就是使用Runtime的方法交换来实现AOP面向切面编程。下方这两个文件就是我们本篇博客所涉及的核心文件。TestClass顾名思义就是我们的测试类,而TestClass+Logging就是TestClass的切片,TestClass+Logging会在TestClass不知情的情况下做一些事情。

  

下方代码段就是TestClass类中的测试方法,该方法是非常简单的,只有一行输出语句

  

下方是未添加切片时的运行结果,是比较正常的,如下所示:

  

 

二、创建切片

接下来我们来创建切片,我们就在TestClass的类目中创建相应的切片。切片实现本质就是讲切入点的方法实现与切片中的方法进行交换。接下来我们就来实现这一过程,其实下方的代码在我们之前聊Runtime的时候就已经聊过了。今天的主题不是Rumtime, 而是AOP, 所以关于Runtime的东西在此就不做过多赘述了。

下方就是本篇博客实现AOP的核心代码:方法交换。

  

下方就是在TestClass中的类目中调用方法交换要做的事情。首先在load()方法中调用方法交换的方法,将切入点testMethod()方法与我们添加的新的方法logTestMethod()进行交换,然后在我们新的方法中调用logTestMethod()。因为testMethod()与logTestMethod()方法的方法实现以及交换了,调用testMethod()即为调用logTestMethod()方法的实现,而调用logTestMethod()方法时,则调用testMethod()方法的实现。

当然这一块比较绕,不过好好捋捋还是不难搞明白的。

  

 

三、切片运行结果

添加完上述切片后,我们再次调用TestClass对象的testMethod()方法时就会先调用before()方法,然后执行testMethod()原有的方法体,然后执行after()方法。运行效果如下所示。

  

 

当然本篇博客的内容比较简单,但是还是比较有意思的。关于OC中更全面的AOP的实现请移步于Github上的第三方库Aspects。当然Aspects也是由OC写的,并在github上可以找到其相应的代码实现,有兴趣的可以去看看。



      本文转自zsdnr  51CTO博客,原文链接:http://blog.51cto.com/12942149/1929655,如需转载请自行联系原作者








相关文章
|
1月前
Micronaut AOP与代理机制:实现应用功能增强,无需侵入式编程的秘诀
AOP(面向切面编程)能够帮助我们在不修改现有代码的前提下,为应用程序添加新的功能或行为。Micronaut框架中的AOP模块通过动态代理机制实现了这一目标。AOP将横切关注点(如日志记录、事务管理等)从业务逻辑中分离出来,提高模块化程度。在Micronaut中,带有特定注解的类会在启动时生成代理对象,在运行时拦截方法调用并执行额外逻辑。例如,可以通过创建切面类并在目标类上添加注解来记录方法调用信息,从而在不侵入原有代码的情况下增强应用功能,提高代码的可维护性和可扩展性。
53 1
|
12天前
|
Java 容器
AOP面向切面编程
AOP面向切面编程
30 0
|
1月前
Micronaut AOP与代理机制:实现应用功能增强,无需侵入式编程的秘诀
【9月更文挑战第9天】AOP(面向切面编程)通过分离横切关注点提高模块化程度,如日志记录、事务管理等。Micronaut AOP基于动态代理机制,在应用启动时为带有特定注解的类生成代理对象,实现在运行时拦截方法调用并执行额外逻辑。通过简单示例展示了如何在不修改 `CalculatorService` 类的情况下记录 `add` 方法的参数和结果,仅需添加 `@Loggable` 注解即可。这不仅提高了代码的可维护性和可扩展性,还降低了引入新错误的风险。
40 13
|
2月前
|
XML Java 数据格式
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
这篇文章是Spring5框架的AOP切面编程教程,通过XML配置方式,详细讲解了如何创建被增强类和增强类,如何在Spring配置文件中定义切入点和切面,以及如何将增强逻辑应用到具体方法上。文章通过具体的代码示例和测试结果,展示了使用XML配置实现AOP的过程,并强调了虽然注解开发更为便捷,但掌握XML配置也是非常重要的。
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
|
2月前
|
Java Spring XML
掌握面向切面编程的秘密武器:Spring AOP 让你的代码优雅转身,横切关注点再也不是难题!
【8月更文挑战第31天】面向切面编程(AOP)通过切面封装横切关注点,如日志记录、事务管理等,使业务逻辑更清晰。Spring AOP提供强大工具,无需在业务代码中硬编码这些功能。本文将深入探讨Spring AOP的概念、工作原理及实际应用,展示如何通过基于注解的配置创建切面,优化代码结构并提高可维护性。通过示例说明如何定义切面类、通知方法及其应用时机,实现方法调用前后的日志记录,展示AOP在分离关注点和添加新功能方面的优势。
47 0
|
3月前
|
Java Spring 容器
Spring问题之Spring AOP是如何实现面向切面编程的
Spring问题之Spring AOP是如何实现面向切面编程的
|
2月前
|
监控 安全 数据库
面向方面编程(AOP)的概念
【8月更文挑战第22天】
64 0
|
2月前
|
XML Java 数据库
Spring5入门到实战------10、操作术语解释--Aspectj注解开发实例。AOP切面编程的实际应用
这篇文章是Spring5框架的实战教程,详细解释了AOP的关键术语,包括连接点、切入点、通知、切面,并展示了如何使用AspectJ注解来开发AOP实例,包括切入点表达式的编写、增强方法的配置、代理对象的创建和优先级设置,以及如何通过注解方式实现完全的AOP配置。
|
3月前
|
监控 安全 Java
Java中的AOP编程实践与应用场景
Java中的AOP编程实践与应用场景
|
3月前
|
安全 Java C++
Java中的AOP编程详解
Java中的AOP编程详解