码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Spring5应用之AOP概念详解


    作者简介:☕️大家好,我是Aomsir,一个爱折腾的开发者!
    个人主页:Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客
    当前专栏:Spring5应用专栏_Aomsir的博客-CSDN博客

    文章目录

    • 参考文献
    • 前言
    • AOP概念
      • 切面
      • 开发步骤
    • 总结

    参考文献

    • 孙哥suns说Spring5~学不会Spring? 因为你没找对人~孙帅
    • Spring官方文档

    前言

    在之前的文章中,我们逐步揭示了静态代理、AOP的动态代理、额外功能以及切入点等关键概念。通过这些篇章,我们逐渐探究了AOP的四步编程方法,然而,对于AOP的整体概念,我们尚未完全涉猎。继之前的AOP实战经验后,从本篇开始,我将深入带领大家探索和理解AOP的核心思想,希望能助大家在面试或实际应用中更为自信,从众多候选者中脱颖而出

    AOP概念

    学过C语言的朋友都知道,它主要采用的是面向过程的编程方式,即POP (Procedure Oriented Programming)。而Java,则是一门面向对象的编程语言,即OOP (Object Oriented Programming)。而AOP (Aspect Oriented Programming),则代表了面向切面的编程。
    那么,这三者具体是什么呢?

    • OOP (Object Oriented Programming):它的核心是将真实世界的事物抽象成对象,以对象为基本单位进行程序开发。对象之间可以彼此交互、协同工作,从而完成整个程序的构建。OOP强调数据和处理数据的方法的封装。
    • POP (Procedure Oriented Programming):这是一种以函数或过程为基本单位的程序开发方法。它更关注的是程序执行的流程,而不是数据的封装。在这种方法中,数据通常是通过函数参数传递的,程序由一系列函数调用构成。
    • AOP (Aspect Oriented Programming):AOP为我们提供了一种全新的视角,允许我们定义横切关注点,即在多个对象中都可能出现的公共功能(如日志、安全等)。AOP使这些横切关注点与主业务逻辑分离,从而提高代码的可重用性和维护性

    切面

    切面(Aspect)是面向切面编程(AOP)中的核心概念,它由切入点(Pointcut)和额外功能(Advice)构成。拿Spring的AOP动态代理为例,其核心的组装步骤正是这样的切入点和额外功能的结合。这种结构模式为我们提供了一种机制,通过代理类来为原始类附加额外功能,而不需要修改原始类的代码。

    这样,Spring的AOP动态代理实质上是面向切面的编程的实现。其主要优势在于,增强的功能被分离,使得原始类的维护更为简单和清晰。

    然而,需要强调的是,尽管AOP提供了一种新的编程范式,它并不意图取代传统的面向对象编程(OOP)。相反,AOP旨在作为OOP的一个补充,帮助我们更高效地处理横切关注点,进而提升代码的整洁度和可维护性

    
    <aop:advisor advice-ref="arround" pointcut-ref="pc" />
    
    • 1
    • 2

    开发步骤

    • 原始类与方法
    • 额外功能(实现MethodInterceptor)
    • 切入点定义
    • 组装切面

    总结

    经过本篇的深入探讨,我们更为清晰地理解了面向过程编程、面向对象编程以及面向切面编程这三大编程范式。特别地,我们对AOP有了更加全面的把握,从其核心概念、构成要素,到其在Spring中的实际应用与实现。值得注意的是,AOP并不旨在取代传统的OOP,而是提供一种更为灵活、高效的编程方式,使我们能更加轻松地处理共通关注点,优化代码结构。通过整合原始类、额外功能、切入点定义及切面的组装,我们看到了AOP的强大与魅力,期望这些知识能助大家在实际开发中实现更加简洁、高效的代码

  • 相关阅读:
    【unity3D】Input Field组件(可供用户输入的文本框)
    计算机专业毕业设计项目推荐10-饮食搭配平台(Go+微信小程序+Mysql)
    河北地质大学计算机考研资料汇总
    ImportError: cannot import name ‘transforms‘ 不能从torchtext中导入transforms模块
    【Java】Groovy 语言应用场景以及积累
    java开源商城免费搭建 VR全景商城 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城
    ve-plus:基于 vue3.x 桌面端UI组件库|vue3组件库
    使用VBA打印PDF文件
    R语言中的函数27:polynom::polynomial(), deriv(),integral(),solve()多式处理函数
    玩转ChatGPT:DALL·E 3生成图像
  • 原文地址:https://blog.csdn.net/qq_43266723/article/details/133461891
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号