AOP-面向切面的编程

Go能实现AOP吗? hello~大家好,我是小楼,今天分享的话题是Go是否能实现AOP? 背景 写Java的同学来写Go就特别喜欢将两者进行对比,就经常看到技术群里讨论,比如Go能不能实现Java那样的AOP啊?Go写个事务好麻烦啊,有没有Spring那样的@Transactional注解啊? 遇到这样的问题我通常会回复:没有、实现不了、再见。 直到看了《Go语言底层原理剖析》这本书,开始了一轮认真地探索。 Java是如何实现AOP的 AOP概念第一次是在若干年前学Java时看的一本书《Spring实战》中看到的,它指的是一 阅读详情
课程概要:
  • AOP的简介
  • AOP的示例
  • AOP的术语
  • AOP的实现者
一.AOP的简介
1.AOP的基本概念
AOP即Aspect-Oriented programming的缩写,中文意思是面向切面(或方面)编程。他是一种思想,可在不改变程序源码的情况下为程序添加额外的功能。
2.AOP的发展阶段
  • 静态AOP:Aspect形式,通过特定的编译器,将实现后的Aspect编译并织入到系统的静态类中。
  • 动态AOP:AOP的织入过程在系统运行开始之后进行,而不是预先编译到系统中。
3.AOP的主要意图
允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发。应用对象只实现业务逻辑即可,并不负责其他的系统级关注点。
4.AOP的应用场景
日志记录、跟踪、监控和优化,性能统计、优化,安全、权限控制,应用系统的异常捕捉及处理,事物处理,缓存,持久化,懒加载(Lazy loading),内容传递,调试,资源池,同步等等。
二.AOP的示例

public class ForumService{
    public void removeTopic(int topicid){
        pmomitor.start();
        transManager.beginTransaction();
        topicDao.removeTopic(topicid);
        transManager.commit();
        pmomitor.end();
    }
}
上面的代码是一个论坛的性能监视代码段,他的横切逻辑示意图为:


其中业务逻辑的抽取主要是:将相同功能的代码段横向抽取出来,使用横切的逻辑来实现。

三.AOP的术语
  • 连接点:程序执行的某个特定位置,比如类初始化前,初始化后,方法调用前,方法调用后等等
  • 切点:通过切点来定位特定的连接点
  • 增强:织入到目标的类连接点上的一段程序代码
  • 目标对象:增强逻辑的织入目标类
  • 引介:引介是一种特殊的增强,他为类添加一些属性和方法
  • 织入:将增强添加到目标类的具体连接点上的过程
  • 代理:一个类被AOP织入增强后,会产生一个结果类,该类是融合了原类和增强逻辑的代理类
  • 切面:由切点和增强组成,既包括了横切逻辑的定义,也包括了连接点的定义
四.五种通知
  • 前置通知:在目标方法调用之前执行。不能阻止后续执行,除非抛异常。
  • 后置通知:在目标方法调用之后执行。目标方法正常结束才执行。
  • 异常通知:在目标方法调用发生异常之后执行。但是如果目标方法中捕获了异常,那么异常通知不会执行。
  • 最终通知:在目标方法调用之后执行。目标方法正常或异常都执行。
  • 环绕通知:在目标方法调用之前和之后执行。

说明:

  • 后置通知可以接受目标方法的返回值。
  • 最终通知中不能访问返回值,因为方法可能会出异常。
  • 异常通知可以接收异常对象,并且可以指定在出现特定异常时才执行。
五种通知在内部的组织
try {
        // 调用前置通知
        // 环绕前置处理
        // 调用目标对象方法
        // 环绕后置处理
        // 调用后置通知
    } catch (Exception e) {
        // 调用异常通知
    } finally {
        // 调用最终通知
    }
四.AOP的实现者
以下列举的是一些常用的基于Java的AOP实现者
1.AspectJ
AspectJ是目前最完善的AOP语言,对Java编程语言进行了扩展,定义了AOP语法,能够在编译期提供横切代码的织入。AspectJ提供了两种横切实现机制,一种称为动态横切(Dynamic Crosscuting),另一种成为静态横切(Static Crosscuting)。
2.AspectWerkz
基于java的简单、动态和轻量级的AOP框架,支持运行期或者类装载期织入横切代码,它拥有一个特殊的类装载器。他与AspectJ项目已经合并,第一个发行版是AspectJ5。扩展AspectJ语言,以基于注解的方式支持类似AspectJ的代码风格。
3.JBoss AOP
JBoss是一个开源的符合J2EE规范的应用服务器,作为J2EE规范的补充,JBoss中引入了AOP框架,为普通Java提供了J2EE服务,而无需遵循EJB规范。JBoss通过类载入时,使用Javassis对字节码操作实现动态AOP框架。
4.Spring AOP
Spring AOP使用纯Java实现,不需要专门的编译过程,不需要特殊的类装载器,他在运行期通过代理方式向目标类织入增强代码。Spring并不尝试提供最完整的AOP实现,主要侧重一种和Spring IoC容器整合的AOP实现,以解决企业级开发中的常见问题。


AOP【面向切面编程】 文章目录AOP介绍AOP术语AOP的实现方式 AOP介绍 AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming),面向对象编程的补充和完善。   面向切面编程是面向对象中的一种方式而已。在代码执行过程中,动态嵌入其他代码,叫做面向切面编程。常见的使用场景: 日志 事物 数据库操作 面向切面编程,... 阅读详情

相关推荐

【Spring】 AOP面向切面编程

横切关注点从每个方法中抽取出来的同一类非核心业务。在同一个项目中,我们可以使用多个横切关注点对相关方法进行多个不同方面的增强。有十个附加功能,就有十个横切关注点。AOP核心关注点和横切关注点。业务处理的主要流程是核心关注点,非核心代码是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事务、异常等。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。(分离核心业务代码与非核心代码通知(增强)每一个横切关注点。

Orion 2001

解决方案(8) golang里的切面操作--AOP

SEO优化 golang如何进行AOP操作 如何给逻辑接入中间件 如何设计仿gin中间件框架 gin的中间件是如何实现的 前言 做golangWeb开发,我们都用过github.com/gin-gonic/gin。在http的gin里,可以通过以下方式,实现gin的中间件订制: r := gin.New() r.Use(gin.Recovery()) 它很方便地将业务逻辑handler,通过c.Next和c.Abort达到了AOP的效果。 那本文章,对以下场景,提供解决方案: 项目使用websock

fwhezfwhez的博客 8875

AOP(面向切面编程)

AOP(Aspect-Oriented Programming)是面向切面编程的范式,它通过横切关注点(cross-cutting concerns)的模块化,解决了OOP(面向对象编程)在处理横跨多个类和方法的功能时出现的代码重复和耦合问题。核心概念切面(Aspect):横切关注点的模块化(如日志、事务)连接点(Join point):程序执行的特定点(如方法调用)通知(Advice):在连接点执行的动作切点(Pointcut):匹配连接点的谓词(定义何处执行)引入(Introduction)

代码客 1815

【亲测免费】 探索Golang的AOP世界:优雅实现面向切面编程

探索Golang的AOP世界:优雅实现面向切面编程 项目介绍 在软件开发中,有时我们希望在主业务逻辑之外插入额外的操作,如日志记录、权限检查等。为了解耦这些附加功能,我们可以借助于面向切面编程(AOP)。这个名为"AOP"的Go语言开源项目,正是一个轻量级且高效的AOP解决方案,它让你能够轻松地定义和应用切面,实现代码的整洁与高效。 项目技术分析 "AOP"...

gitblog_00014的博客 908

Go库将带您进入AOP世界!-Golang开发

Goa Golang库将带您进入AOP范例世界! 检查果阿文档什么是AOP? 在计算中,面向方面的编程(AOP)是一种编程范例,旨在超越Golang库,它将带您进入AOP范例世界! 检查文档以外的内容什么是AOP? 在计算中,面向方面的编程(AOP)是一种编程范例,旨在通过允许跨领域关注点的分离来提高模块化。 它是通过在现有代码中添加其他行为(建议)来完成此操作的,而无需修改代码本身,而是通过从Wikipedia Get中提取的“切入点”规范分别指定修改哪个代码

基于Python+OpenCV中文及符号检测

一、项目背景与意义在图像处理、文档识别、自动翻译等场景中,中文及符号的准确检测是一个重要且复杂的任务。传统的字符检测方法往往对英文等拉丁字母系的识别效果较好,但对中文及特殊符号的识别准确率较低。本项目旨在利用Python编程语言结合OpenCV库,开发一个能够高效、准确地检测图像中中文及符号的系统,为相关领域的研究和应用提供技术支撑。二、技术实现图像预处理:利用OpenCV的图像处理功能,对输入的图像进行灰度化、二值化、滤波去噪等预处理操作,以提高中文及符号检测的准确性[1]。

2301_79809972的博客 1118

go 切面 AOP 实现

使用Go语言的反射机制和函数类型实现AOP,通过在需要切入的函数前后添加额外的逻辑代码实现AOP。

chechenshi的博客 2359

七、永磁同步电机矢量控制(FOC)—MTPA控制及Simulink仿真

前面几节的内容已经完成Id=0控制策略的理论和仿真以及双闭环PI参数整定。在接下来几节中,将陆续讲解MTPA、弱磁控制等内容。

weixin_45182459的博客 8184

开源项目安装教程:Golang中的面向切面编程(AOP)库

开源项目安装教程:Golang中的面向切面编程(AOP)库 1. 项目介绍 GOGAP/AOP 是一个专为Golang设计的面向切面编程(AOP)框架。AOP是一种编程范式,它提倡将横切关注点(如日志、安全检查等)从核心业务逻辑中分离出来。这个库当前处于alpha版本,意味着API可能不稳定,但它提供了一个强大的基础来定义切面、切点以及增强方法的执行逻辑。通过此框架,开发者可以更干净地组织代码,减...

gitblog_01202的博客 711

运放偏置电路设计:如何精准计算差分放大器的电压偏移量

本文深入解析了差分放大器偏置电路的设计原理与精准计算方法,重点阐述了如何通过引入参考电压实现信号电压偏移,以适应单电源ADC的输入范围。文章结合实战案例,详细推导了偏移电压公式,并强调了电阻匹配、运放选型及PCB布局对精度和共模抑制比的关键影响,帮助硬件工程师避免常见设计陷阱。

weixin_29288313的博客 632

手把手教你用RTL8306MB搭建小型网络交换机:从原理到实战

本文详细介绍了如何使用RTL8306MB交换芯片从零搭建小型网络交换机的全过程。内容涵盖芯片原理分析、核心硬件电路设计(包括电源、时钟、RMII接口连接要点)、驱动开发与SMI通信实现,以及从物理链路到交换功能的系统调试实战。重点解析了将MAC5配置为RMII PHY模式与CPU对接的关键步骤和常见错误,帮助嵌入式开发者深入理解网络交换原理并完成实践。

weixin_29274969的博客 191

AOP面向切面编程

本文介绍了Spring AOP的基本概念和应用。AOP(面向切面编程)是一种横向切割关注点的编程范式,用于解耦日志、事务等横切关注点。文章对比了Spring AOP和AspectJ框架的特点,Spring AOP基于动态代理实现,AspectJ则更强大但复杂。详细讲解了AOP核心术语(切面、切入点、通知等)和五种通知类型的使用方法,包括前置、后置、环绕等通知。通过一个简单案例演示了AOP的实际应用,展示了如何在不修改原有代码的情况下增强方法功能。

xg_960的博客 1600

IEC61850 通信协议测试验证实战指南:从理论到实践

本文提供了一份IEC61850通信协议从理论到实践的完整测试验证实战指南。针对MMS、GOOSE、SV三大核心协议,详细阐述了测试环境搭建、自动化脚本编写、性能与异常测试方法,并分享了常见避坑经验,旨在帮助工程师通过系统化的测试验证,确保电力自动化设备在现场的互联互通与稳定可靠运行。

neovim7hacker的博客 154

java:AOP面向切面编程

AOP是什么:一种将横切关注点(日志、事务等)与核心业务逻辑分离的技术。如何实现:Spring AOP通过动态代理在运行时将切面“织入”到目标方法中。核心注解@Aspect@Pointcut@Around@Before@After等。为何需要:实现解耦、提高代码的可复用性和可维护性,让开发者能更专注于核心业务逻辑。通过AOP,我们可以以一种非常优雅和非侵入式的方式,为应用程序添加强大的功能。

talenteddriver的博客 1769

基于YOLOv10的微小目标检测,多头检测器提升小目标检测精度

引入多头检测器助力YOLOv10,暴力提升小目标检测性能

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 2565

【图像处理】德里奇( Deriche)边缘检测器

Deriche边缘检测,同canny算法齐名,因此,知道canny原理,也有必要知道德里奇的检测原理。本篇专门针对德里奇算法展开讨论。

gongdiwudu的专栏 8680

AOP(面向切面编程)详解

AOP 通过“切面”模块化跨多个类的功能,这些功能通常与业务逻辑不直接相关。AOP 的核心概念是“切面”(Aspect)和“连接点”(Joinpoint)。切面(Aspect):一组同时横切多个类的代码,封装成一个单元。连接点(Joinpoint):程序执行的特定点,如方法的调用或执行。

suqieer的博客 7300

DCNv4+YOLOv8:2024最新可变形卷积赋能目标检测,从原理到实战的科研级优化指南

从理解DCNv4“自适应变形卷积核”的核心思想,到亲手将其嵌入YOLOv8并验证在复杂场景的检测效果,再到基于此探索属于自己的科研与工程方向——这个过程能让你深刻理解目标检测中“特征自适应提取”的核心价值。现在就开始行动,相信你会在目标检测的“自适应特征提取”之路上,走出一条属于自己的技术路径。实验通常会证明:嵌入DCNv4后,YOLOv8在复杂场景下的检测精度提升3-5个百分点,尤其是小目标和遮挡目标的AP提升更为明显,而推理速度仅下降5%-10%(可通过模型量化进一步优化)。2024年最新推出的。

m0_64661770的博客 267

spring AOP面向切面编程

spring AOP面向切面编程 AOP:Aspect Oriented Programing 面向切面编程 面向切面编程指的是:程序是运行期间,动态地将某段代码插入到原来方法代码的某些位置中。这就叫面向切面编程。 AOP采用横向抽取机制,取代了传统纵向继承体系抽取重复性代码(性能监视、事务管理、安全检查、缓存) 面向对象纵向继承机制 面向切面横向抽取机制 AOP面向切面编程的底层原理就是代理 动态代理的方式有两种: 基于接口实现动态代理: JDK动态代理 基于继承实现动态代理:CGLIB代理 优先使用接

Ron_的博客 7804

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Spring AOP面向切面编程

面向切面编程是希望能够将通用需求功能从不相关的类当中分离出来,能够使得很多类共享一个行为,一旦发生变化,不必修改很多类,而只是修改这个行为即可。AOP通过提供另一种思考程序结构的方式来补充了面向对象编程(OOP)。OOP中模块化的基本单元是类(class),而AOP中模块化的基本单元是切面(aspect)。可以这么理解,OOP是解决了纵向的代码复用问题,AOP是解决了横向的代码复用问题。Spring的关键组件之一是AOP框架。

深入Java世界:探索编程之美与技术深度 1028

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: Java8新特性学习(一)Lambda表达式介绍
下一篇: 使用Java实现AOP
wangxin1248
博客等级 码龄11年 305粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值