AOP 面向切面编程

简介: AOP 面向切面编程

一、基本概念


两个编程范式:

  • 面向对象编程(OOP, Object-Oriented Programming),OOP 将系统看作多个对象的交互,它将程序中的数据和操作数据的方法封装在对象中,通过对象之间的交互来实现程序的设计和实现。
  • 面向切面编程(AOP, Aspect-Oriented Programming),AOP 将系统分解为不同的关注点,它将程序中横切的关注点(如日志、安全、事务管理等)与主要业务逻辑分离,通过切面来处理这些横切关注点。


三个基本概念:

  • 关注点:关注点是指具有相似目标的一组功能。例如,一个购物网站中的用户注册、登录、购物车管理等就是不同的关注点,它们分别关注着用户身份验证、用户行为记录、购物车状态管理等功能。
  • 横切关注点:当一个功能或问题横跨多个模块或关注点时,称之为横切关注点。例如,在一个购物网站中,日志记录可能涉及用户注册、登录、购物车管理等多个关注点,日志记录就是一个横切关注点。
  • 切面:切面是用于处理横切关注点的模块或组件。在购物网站的例子中,日志记录就是一个切面,它负责处理用户在不同功能中的操作记录。切面提供了一种将横切关注点的通用功能与具体功能分离的机制。


生活中的例子:

  • 在厨房中,不同区域如备菜区、烹饪区等代表不同的关注点,每个区域有着独特的功能。
  • 清洁卫生作为一个切面,贯穿于各个区域,横切关注每个区域的卫生状况,确保整体环境的清洁。


二、核心思想


AOP 的核心思想是:通过在关注点周围织入切面,将横切关注点的代码分离出来,将通用功能模块化,提高代码的可维护性和可读性。


三、Demo 示例


示例 1:日志记录

import functools
def logging_decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print(f"Logging: Calling function {func.__name__}")
        result = func(*args, **kwargs)
        print(f"Logging: Function {func.__name__} executed")
        return result
    return wrapper
@logging_decorator
def add(a, b):
    return a + b
result = add(2, 3)
print(result)


输出结果:

Logging: Calling function add
Logging: Function add executed
5


示例说明:

这个示例演示了使用装饰器实现简单的日志记录功能,将日志记录从核心的加法函数中分离出来。


示例 2:性能监测

import time
import functools
def performance_decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f"Performance: Function {func.__name__} executed in {end_time - start_time} seconds")
        return result
    return wrapper
@performance_decorator
def multiply(a, b):
    time.sleep(2)
    return a * b
result = multiply(5, 4)
print(result)


输出结果:

Performance: Function multiply executed in 2.001655340194702 seconds
20


示例说明:

这个示例演示了使用装饰器实现性能监测功能,记录函数执行时间,而不修改核心的乘法函数。


四、要点小结


  • 面向切面编程的产生是为了解决模切关注点散乱在代码中的问题。
  • 它的核心思想是在关注点周围织入切面,将横切关注点的代码分离出来,实现功能的模块化。
  • 在 Python 中,装饰器是实现面向切面编程的一种方式。
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
5天前
|
设计模式 SQL 运维
面向切面:AOP(1)
面向切面:AOP(1)
50 2
面向切面:AOP(1)
|
5天前
|
Java 数据库连接 应用服务中间件
Spring5源码(39)-Aop事物管理简介及编程式事物实现
Spring5源码(39)-Aop事物管理简介及编程式事物实现
27 0
|
5天前
AOP&面向切面编程
AOP&面向切面编程
58 0
|
5天前
|
XML 监控 安全
Spring特性之一——AOP面向切面编程
Spring特性之一——AOP面向切面编程
16 1
|
5天前
|
前端开发 Java 开发者
【JavaEE】面向切面编程AOP是什么-Spring AOP框架的基本使用
【JavaEE】面向切面编程AOP是什么-Spring AOP框架的基本使用
11 0
|
5天前
|
Java Spring
代码优雅的转变:基于注解的AOP编程在Spring中的实践
代码优雅的转变:基于注解的AOP编程在Spring中的实践
19 0
|
5天前
|
XML 监控 Java
Spring AOP:解锁切面编程的威力与实践
Spring AOP:解锁切面编程的威力与实践
22 0
Spring AOP:解锁切面编程的威力与实践
|
5天前
|
XML 安全 Java
spring面向切面编程AOP
spring面向切面编程AOP
|
5天前
|
Java
SpringBoot整合AOP整合aspectj实现面向切面编程实现参数接收和请求时间打印
SpringBoot整合AOP整合aspectj实现面向切面编程实现参数接收和请求时间打印
7 0
|
5天前
|
XML 存储 Java
JAVAEE框架整合技术之Spring02-AOP面向切面编程技术
JAVAEE框架整合技术之Spring02-AOP面向切面编程技术
55 0
JAVAEE框架整合技术之Spring02-AOP面向切面编程技术