【Java框架】Spring-AOP官方文档人肉翻译

       1. 首先提到了AOP和OOP。

OOP(面向对象编程)

  • 定义:面向对象编程是一种编程范式,通过类和对象来组织代码。它强调将数据和操作数据的函数封装在一起,并通过对象实例化这些类。
  • 关键概念
    • :定义对象的模板,包含属性(字段)和方法。
    • 对象:类的实例,表示具体的实体。
    • 封装:将数据和操作数据的方法绑定在一起,隐藏实现细节。
    • 继承:通过从一个类派生出新类,复用已有的代码。
    • 多态:通过方法重载和重写,实现同一接口的不同实现。

AOP(面向切面编程)

        面向切面编程(AOP)是一种编程技术,其目的是将那些横跨多个模块的功能,比如日志记录、事务管理和安全检查等,从业务逻辑中分离出来,单独进行处理和管理。这些功能通常被称为“横切关注点”,因为它们不属于单个模块或类的核心业务逻辑,而是在整个程序中以横切的方式存在。通过AOP,可以将这些横切关注点模块化,使得代码更加清晰,易于维护和扩展。

  • 关键概念
    • 切面(Aspect):模块化的横切关注点的实现。
    • 连接点(Join Point):程序执行中的特定点,如方法调用或异常抛出。
    • 切点(Pointcut):定义在哪些连接点应用切面的集合。
    • 通知(Advice):在特定的连接点上执行的代码,如方法执行前后的操作。
    • 织入(Weaving):将切面应用到目标对象的过程。

总结

  • OOP:主要关注类和对象的设计与实现,通过封装、继承和多态来提高代码的复用性和灵活性。
  • AOP:通过切面将横切关注点分离出来,实现更清晰的关注点分离,使代码更加简洁和易于维护。

        Spring AOP与AspectJ切点 Spring提供了两种简单而强大的编写自定义切面的方式,一种是使用基于模式的方法,另一种是使用@AspectJ注解风格。这两种风格都提供了完全类型化的建议和使用AspectJ切点语言,同时仍然使用Spring AOP进行织入。

2.AOP中的基本概念(这段不是太懂,看个大概)

  1. 切面(Aspect):切面就像是一个包裹,可以横跨多个类并且提供一种特定的功能。比如,日志记录可以作为一个切面,它可以在每个方法执行前后打印日志信息。

  2. 连接点(Join point):连接点就是程序执行过程中的一个具体点,比如方法的执行或者异常的处理。比如,一个方法被调用时,就是一个连接点。

  3. 通知(Advice):通知是切面在连接点执行时采取的行动。比如,一个切面可以在方法执行之前打印日志(前置通知),或者在方法执行完毕后记录日志(后置通知)。

  4. 切点(Pointcut):切点是一种定义,它匹配连接点的条件。比如,一个切点可以定义为匹配所有名称以"get"开头的方法。

  5. 引入(Introduction):引入允许在现有类中添加新方法或字段,而无需修改类的代码。比如,可以通过引入让一个类实现一个新接口,而不必修改原始类的代码。

  6. 目标对象(Target object):目标对象是一个或多个切面所影响的对象。比如,一个服务类可以是一个目标对象,它受到日志记录切面的影响。

  7. AOP代理(AOP proxy):AOP代理是AOP框架创建的对象,用于实现切面的功能。在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。

  8. 织入(Weaving):织入是将切面应用到目标对象以创建一个新的代理对象的过程。比如,在方法调用之前或之后,织入可以插入日志记录功能。

  9. 环绕通知(Around advice):环绕通知是一种特殊的通知类型,它可以完全控制连接点的执行。比如,一个环绕通知可以在方法执行之前和之后记录日志,并决定是否执行原始方法。

  10. Spring AOP中的通知类型:Spring AOP包括前置通知(Before advice)、后置通知(After returning advice)、异常通知(After throwing advice)和最终通知(After (finally) advice)。这些通知类型可以让你在不同的时间点执行不同的操作,比如在方法执行之前执行某些操作,或者在方法执行之后记录日志。

3.Spring AOP的功能和目标

        Spring AOP是用纯Java实现的,不需要特殊的编译过程。Spring AOP不需要控制类加载器层次结构,因此适用于在Servlet容器或应用服务器中使用。

        Spring AOP的AOP方式与大多数其他AOP框架不同。其目标不是提供最完整的AOP实现(尽管Spring AOP功能相当强大)。相反,其目标是在AOP实现和Spring IoC之间提供紧密的集成,以帮助解决企业应用程序中的常见问题。

4、Spring AOP代理

这段内容描述了Spring AOP在创建代理时的两种方式:JDK动态代理和CGLIB代理。这两种代理方式用于在运行时创建代理对象,用于实现AOP的功能。

举个例子来说,假设我们有一个接口UserService和其实现类UserServiceImpl

public interface UserService {void addUser(String username);
}public class UserServiceImpl implements UserService {public void addUser(String username) {// 添加用户的实现逻辑System.out.println("添加用户:" + username);}
}

如果我们使用Spring AOP创建代理对象,并且UserServiceImpl实现了UserService接口,那么默认情况下,Spring会使用JDK动态代理来创建代理对象。这意味着我们可以这样配置AOP:

<aop:config><aop:aspect ref="myAspect"><aop:pointcut id="myPointcut" expression="execution(* com.example.UserService.addUser(..))"/><aop:before pointcut-ref="myPointcut" method="beforeAddUser"/></aop:aspect>
</aop:config>

在这种情况下,Spring会使用JDK动态代理来创建UserService接口的代理对象,并在方法调用前执行beforeAddUser方法中定义的逻辑。

另一方面,如果UserServiceImpl没有实现任何接口,Spring将会使用CGLIB代理来创建代理对象。这种情况下,我们需要将proxy-target-class设置为true,告诉Spring强制使用CGLIB代理:

<aop:config proxy-target-class="true"><aop:aspect ref="myAspect"><aop:pointcut id="myPointcut" expression="execution(* com.example.UserServiceImpl.addUser(..))"/><aop:before pointcut-ref="myPointcut" method="beforeAddUser"/></aop:aspect>
</aop:config>

这样,Spring将会使用CGLIB代理来创建UserServiceImpl类的代理对象,并在方法调用前执行beforeAddUser方法中定义的逻辑。

未完待续。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/15427.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux学习(十二)-- 用户管理与用户组管理、su与exit命令、sudo命令

目录 1. 用户管理 注&#xff1a; 以下命令需root用户执行 1.1 创建用户 1.2 删除用户 1.3 查看用户所属组 1.4 修改用户所属组 2.用户组管理 注&#xff1a; 以下命令需root用户执行 2.1 创建用户组 2.2 删除用户组 拓展&#xff1a; 3. su命令与exit命令 4. sudo…

环形天线简介

环形天线&#xff0c;这是一种独特而重要的无线电天线&#xff0c;其结构呈环形或圆环状。它在无线通信和雷达系统中扮演着重要的角色&#xff0c;得益于其独特的设计和工作原理&#xff0c;环形天线在各个领域都有着广泛的应用。本文将深入介绍环形天线的原理、工作方式以及其…

Python高效数据分析的综合复习指南【时间处理与机器学习】

五、时间处理 一、时间戳-----Timestamp类型 方法1&#xff1a;使用Timestamp创建 pandas.Timestamp(ts_input, freqNone, tzNone, unitNone, yearNone, monthNone, dayNone, hourNone, minuteNone, secondNone, microsecondNone, tzinfoNone, offsetNone) import pandas a…

26计算机操作系统408考研-操作系统进程与线程篇章(三)

操作系统进程与线程篇章 ` 文章目录 操作系统进程与线程篇章前言一、进程概念进程控制块进程创建进程终止进程的阻塞和唤醒进程唤醒进程挂起和激活线程多线程线程实现与线程模型总结互斥和同步并发原理硬件同步信号量机制信号量的应用管程经典同步问题消息传递前言 一、进程概…

K8S Secret管理之SOPS

1 关于SOPS SOPS (Secret OPerationS) 是一个由 Mozilla 开发的命令行工具,用于加密和解密文件中的敏感数据。SOPS支持使用 AWS KMS、GCP KMS、Azure Key Vault、PGP 加密 YAML、JSON、ENV、INI 以及二进制格式的文件。其主要目标是使敏感信息(例如配置文件、凭证、密钥等)…

碌时刻必备!微信自动回复让你告别消息堆积

在忙碌的时候&#xff0c;我们往往会面临消息堆积如山的情况。无法及时回复消息不仅容易造成交流障碍&#xff0c;还可能错过重要的机会。 但是现在&#xff0c;有一个神奇的工具——个微管理系统&#xff0c;可以帮助我们轻松应对这个问题 &#xff0c;实现微信自动回复。 首…

Mujava 工具的简单使用

首先下载openjava.jar和mujava.jar&#xff0c;以及自己手写一个mujava.config指向存放mujava的目录&#xff0c;并将这些文件放在mujava目录下。此时&#xff0c;基本的mujava环境就搭建好了。 分别创建src&#xff08;存放源码文件&#xff09;、classes&#xff08;存放源码…

每日一题 求和

1.题目解析 求和_牛客题霸_牛客网 (nowcoder.com) 这一题&#xff0c;主要描述的就是求满足和为m的子序列&#xff0c;对与子序列的问题可以使用决策树。 2.思路分析 决策树如下图所示: 递归结束条件&#xff1a; 当当前和 sum 等于目标和 m 时&#xff0c;说明找到了一个满…

如何在华为手机上恢复已删除的视频[4种解决方案]

概括 在数字媒体时代&#xff0c;智能手机已成为我们的个人金库&#xff0c;存储以视频形式捕捉的珍贵记忆。然而&#xff0c;意外删除这些珍贵的文件可能会是一次令人心痛的经历。对于华为手机用户来说&#xff0c;由于删除或其他意外导致视频丢失尤其令人痛苦。但不用担心&a…

Python 拼图游戏

拼图游戏(puzzle)是一种常见的益智游戏&#xff0c;玩家通过拖动图块来正确拼接成完整的图片。 由一张原图&#xff0c;分割成图块&#xff0c;拼图块的大小将会根据行列数自动调整&#xff0c;然后随机打乱&#xff0c;玩家通过拖拽图块&#xff0c;最后复原原图。 &#x1f…

idea使用鼠标滚轮进行字体大小缩放

idea使用鼠标滚轮进行字体大小缩放 使用快捷键CtrlAltS进入到设置页面 在左上角搜索框输入“increase”&#xff0c;在左侧的Keymap中右击“Increase Fort Size”&#xff0c;点击“add mouse shortcut”&#xff0c;然后录入我们要设置的快捷键&#xff0c;比如我是点击ctrl鼠…

基于SpringBoot+Vue+Mysql的实验室低值易耗品管理系统

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

Django 里的app概念

在 vs code 里的 Terminal 里运行下面的命令来创建一个项目文件夹 django-admin startproject [新项目名称]进入到刚刚创建的新项目的文件夹&#xff0c;在 urls.py 文件里进行修改 """ URL configuration for mywebsite project.The urlpatterns list routes…

AtCoder Beginner Contest 354 (ABCDEFG题)视频讲解

2024年5月19日补充G题。 A - Exponential Plant Problem Statement Takahashi is growing a plant. Its height at the time of germination is 0 c m 0\,\mathrm{cm} 0cm. Considering the day of germination as day 0 0 0, its height increases by 2 i c m 2^i\,\mat…

看一遍就理解:MVCC原理详解

介绍 MVCC&#xff08;Multi-Version Concurrency Control&#xff0c;多版本并发控制&#xff09;是一种用于实现数据库并发访问控制的机制。它允许多个用户同时读写同一数据项&#xff0c;从而提高了数据库在高并发环境下的性能和响应速度。以下是具体介绍&#xff1a; 基本…

前端基础入门三大核心之HTML篇:深入解读div标签与HTML5的现代魅力

前端基础入门三大核心之HTML篇&#xff1a;深入解读div标签与HTML5的现代魅力 一、div标签&#xff1a;布局中的万金油1.1 div标签基本概念1.2 div标签的使用1.3 实践技巧 二、HTML5&#xff1a;重塑网页结构的新篇章2.1 HTML5简介2.2 语义化标签2.3 多媒体支持2.4 Canvas绘图 …

Python代码注释的艺术与智慧

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;注释的必要性 二、注释的误区&#xff1a;不是越多越好 过度注释的问题…

服务器端口号怎么看?如何查看服务器端口号呢?有哪些需要注意的?

简单来说&#xff0c;端口号就是计算机与外界通讯交流的出口&#xff0c;每个端口都有不同的编号&#xff0c;也就是“端口号”。它们是唯一的&#xff0c;用于标识不同的服务和应用程序。通过端口号&#xff0c;我们可以知道哪些服务正在运行&#xff0c;以及如何与它们进行通…

【Linux系统编程】进程概念、进程排队、进程标识符、进程状态

目录 什么是进程&#xff1f; 浅谈进程排队 简述进程属性 进程属性之进程标识符 进程操作之进程创建 初识fork fork返回值 原理角度理解fork fork的应用 进程属性之进程状态 再谈进程排队 进程状态 运行状态 阻塞状态 挂起状态 Linux下的进程状态 “R”(运行状…

洗地机哪个牌子最好用?2024洗地机排行榜

随着人们生活水平的提升&#xff0c;智能清洁家电已经成为日常生活中的必需品。如今的清洁家电市场上&#xff0c;洗地机、吸尘器和扫地机器人等设备各有其独特的功能和优势。洗地机结合了扫、拖、吸和自清洁等多种功能&#xff0c;不仅可以处理干湿垃圾&#xff0c;还能高效清…