Aop(Aspect Oriented Programming,面向切面编程)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

面向切面编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

不修改源代码的方式,在主干功能中添加新功能。

(1)AOP中的一些概念

目标对象(target)

目标对象指将要被增强的对象,即包含主业务逻辑的类对象。

连接点(JoinPoint)

连接点,程序运行的某一个点,比如执行某个方法,在Spring AOP中Join Point总是表示一个方法的执行。

类里面那些方法可以被增强,这些方法成为连接点。

代理对象(Proxy)

AOP中会通过代理的方式,对目标对象生成一个代理对象,代理对象中会加入需要增强功能,通过代理对象来间接的方式目标对象,起到增强目标对象的效果。

通知(Advice)

需要在目标对象中增强的功能,如上面说的:业务方法前验证用户的功能、方法执行之后打印方法的执行日志。

通知中有2个重要的信息:方法的什么地方,执行什么操作,这2个信息通过通知来指定。

方法的什么地方?之前、之后、包裹目标方法、方法抛出异常后等。

如:

在方法执行之前验证用户是否有效。

在方法执行之后,打印方法的执行耗时。

在方法抛出异常后,记录异常信息发送到mq。

切入点(Pointcut )

用来指定需要将通知使用到哪些地方,比如需要用在哪些类的哪些方法上,切入点就是做这个配置的。

实际被增强的方法,称为切入点。

切面(Aspect)

通知(Advice)和切入点(Pointcut)的组合。切面来定义在哪些地方(Pointcut)执行什么操作(Advice)。

顾问(Advisor)

Advisor 其实它就是 Pointcut 与 Advice 的组合,Advice 是要增强的逻辑,而增强的逻辑要在什么地方执行是通过Pointcut来指定的所以 Advice 必需与 Pointcut 组合在一起,这就诞生了 Advisor 这个类,spring Aop中提供了一个Advisor接口将Pointcut 与 Advice 的组合起来。Advisor有好几个称呼:顾问、通知器。

(2)AOP底层原理

        1)AOP底层使用动态代理

                有两种情况动态代理:

                第一种 有接口情况,使用JDK动态代理。

                创建接口实现类代理对象,增强类的方法。

 

               第二种 无接口情况,使用CDLIB动态代理

                创建子类的代理对象,增强类的方法

 

        2)AOP JDK动态代理

                使用jdk动态代理,需要使用Proxy类里面的方法创建代理对象

                调用newProxyInstance方法

                方法有3个参数:

                        类加载器

                        增强方法所在的类,这个类实现的接口,支持多个接口

                        实现这个接口InvocationHandler,创建代理对象,写增强的方法

 jdk动态代理代码

(3)AOP操作

1)Spring框架一般都是基于AspectJ实现AOP操作。

AspectJ不是Spring组成部分,独立AOP框架,一般将其与Spring框架一起使用,进行AOP操作。

2)基于AspectJ实现AOP操作

基于xml配置文件实现

基于注解方式实现(使用)

3)在项目工程中引入AOP相关依赖

4)切入点表达式

 

4)AOP操作-AsepctJ注解

创建类,在类里面定义方法

 

创建增强类(编写增强逻辑) 

进行通知的配置 

在spring配置文件中开启注解扫描

使用注解创建User和UserProxy对象

在增强类上面添加注解 @Aspect

在spring配置文件中开启Aspect生成对象

配置不同类型通知

在增强类的里面,在作为通知方法上面添加通知类型注解,使用切入点表达式配置

(5)AOP操作-AsepctJ配置文件

创建两个类,增强类和被增强类,创建方法

在spring配置文件中创建两个类对象

在spring配置文件中配置切入点

 

spring-aop组件详解——TargetSource目标 spring aop 阅读详情

相关推荐

springAOP中的target、this、within的区别

前言 关于这三者的区别,在网上找到的资料不多,大多是AspectJ的资料,并且大量的copy,查阅官方文档后,自己又做了一些实验,最终有了这篇博客,因为是自己摸索的结果,并且没有阅读相应源码,如有错误,欢迎指出(有空还是把markdown给看了,csdn的排版不是很喜欢...........   target target匹配目标对象的类型,即被代理对象的类型,例如A继承了B接口,则使用t...

菜到怀疑人生的博客 7967

AOP 中必须明白的概念-目标对象(Target Object)

被一个或者多个切面所通知的对象。例如,AServcieImpl 和BServiceImpl,当然在实际运行时,SpringAOP 采用代理实现,实际AOP 操作的是TargetObject 的代理对象。

Leon_Jinhai_Sun的博客 2736

spring aop的@target与@within的真正区别到底是什么?

文档里面是这么说的: @target: Limits matching to join points (the execution of methods when using Spring AOP) where the class of the executing object has an annotation of the given type. @within: Limits matching to join points within types that have the given annot

若鱼的专栏 6215

AOP基本概念

AOP基本概念

qq_45106437的博客 332

面向切面编程Aspect-Oriented ProgrammingAOP)简介

面向切面编程Aspect-Oriented ProgrammingAOP)是一种编程范式,旨在将关注点分离,使得系统中的横切关注点(如日志、事务管理、安全性检查等)可以从核心业务逻辑中解耦出来。在传统的面向对象编程中,这些横切关注点往往被分散地插入到多个类或方法中,导致代码重复且难以维护。而 AOP 提供了一种更优雅的方式,允许开发者把这些关注点集中定义为独立的模块,称为"切面"。:切面是封装了特定关注点的模块,它可以包含通知(advice)、切入点(pointcut)和织入(weaving)等元素。

热爱技术的大白 2095

AOPAspect Oriented Programming),即面向切面编程

AOP AOPAspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中...

dengjuanshou7445的博客 305

AOP(Aspect oriented programming)面向切面编程

希望达到核心业务与系统服务之间相对独立,而又想让核心业务带着系统层面的功能,实现这种效果的技术我们称之为AOP. AOP采用的是横向抽取机制,将分散在个方法的重复代码抽取出来,然后在程序的编译期或者运行期在将这些代码运行到需要执行的地方。 本质:通过代理的方式进行方法的增强。 aop实现管理: JDK动态代理:基于接口的,只能代理接口 CGLIB代理:通过字节码进行的 Aop核...

__盛某人的博客 404

AOP(Aspect Oriented Programming)面向切面编程

AOP(Aspect Oriented Programming)面向切面编程 概述: AOP面向切面编程,其本质是动态代理, 指在委托类前/后/前后进行处理,从而达到对目标实现类某一模块功能的扩充, AOP的核心是切面(切点+通知) AOP的实现方式: 1.基于Schema-based的传统方式实现(实现相应的通知接口) 2.基于XML文件AspectJ方式实现 3.基于Annotation注解...

lkfmiaomiao的博客 282

AOPAspect-oriented programming面向切面编程

概述 面向切面的程序设计(Aspect-oriented programmingAOP)是CS计算机科学中的一种程序设计泛型,旨在将横切关注点与业务主体进行进一步分离,以提高程序代码的模块化程度。其可以通过预编译方式和运行期动态代理实现在不修改源码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,提高代码的灵活性和可...

Jeff_的博客 2042

AOPAspect-Oriented Programming面向切面编程

AOP 是一种编程范式,它通过横切关注点(cross-cutting concerns)的概念,增强了传统的面向对象编程(OOP)的能力。AOP 的主要目的是将横切关注点从业务逻辑中抽离出来,达到模块化和代码解耦的效果。

YiHanXii的博客 1252

AOP面向切面编程Aspect-Oriented Programming

java运行// 1. 标记为组件(Spring扫描)+ 标记为切面@Component@Aspect// 2. 定义切点:匹配com.example.service包下所有类的所有方法// 3. 前置通知:方法执行前打日志// 获取方法名// 获取方法参数System.out.println("前置通知:执行方法[" + methodName + "],参数:" + args);// 4. 环绕通知:统计方法执行耗时// 执行原业务方法。

2501_94447362的博客 1202

Spring AOP面向切面编程Aspect-Oriented Programming

Spring 框架提供的轻量级面向切面编程实现,通过代理模式(JDK 动态代理或 CGLIB)实现运行时织入。它通过切面、切点和通知分离横切关注点,广泛应用于日志、事务、权限控制等场景。是 Spring 框架提供的面向切面编程支持,用于将横切关注点(cross-cutting concerns,如日志、事务、权限检查等)与核心业务逻辑分离。AOP 允许开发者通过声明式方式将通用功能模块化,减少代码重复,提高代码可维护性。等)定义切面,适合现代 Spring 应用。等)更现代化且易用。

weixin_44719499的博客 730

AOPAspect Oriented Programming面向切面编程及应用实例

引言 AOP是对OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP通过封装、继承、多态等来对对象进行操作。OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能...

chengzhen8081的博客 271

AOP-面向切面编程Aspect Oriented Programming)

AOPAspect Oriented Programming),即面向切面编程,利用一种称为"横切"的技术,剖开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。连接点(Joinpoint):连接点是程序类中客观存在的方法,可被Spring拦截并切入内容。切入点(Pointcut):被Sp

m0_46356620的博客 926

aopAspect Oriented Programming面向切面编程

AOP,一个oop的后传,面向切面,一个基于代理模式的机制。举例子把:说原理很难理解,吃饭:谁都得吃饭,一个老师类,有吃饭的方法。一个学生类,也得有吃饭的方法。是不是都得实现这个方法?构建一个person类?通过学生老师继承实现这个方法。但是从面向对象的角度来讲,代码应该高内聚低耦合,如果大量的继承方式实现,那就违背了这个思想。所以通过aop思想实现,其中最具有代表性就是代理模式,通过一个工厂,专...

第二颗大白菜 3971

Java 面向切面编程Aspect Oriented ProgrammingAOP

本文内容 实例 引入原始方法装饰者模式 JDK 动态代理和 cglib 代理直接使用 AOP 框架——AspectWerkz 新公司使用了 AOP 相关的技术,于是复习一下,没怎么在实际项目中使用过~ 实例 引入 package com.cap.aop;   public interface ICalculator { public

wah001的博客 2357

Spring——AOPAspect Oriented Programming面向切面编程

AOPAspect Oriented Programming面向切面编程 文章目录AOPAspect Oriented Programming面向切面编程1、什么是 AOP?2、AOP(底层原理)2.1、AOP 底层使用动态代理3、AOP( JDK 动态代理)4、AOP(术语)4.1、连接点4.2、切入点4.3、通知(增强)4.4、切面5、AOP 操作(准备工作)6、AOP 操作(AspectJ 注解) 1、什么是 AOP面向切面编程(方面), 利用 AOP 可以对业务逻辑的各个部分进行隔离,

前尘忆梦的博客 813

Spring-AOP面向切面编程Aspect Oriented Programming

6.1 Spring AOP 6.1.1 理解“面向切面编程面向切面编程Aspect Oriented Programming,AOP)是软件编程思想发展到一定阶段的产物,它是对面向对象编程(Object Oriented Programming,OOP)的有益补充。AOP一般适用于具有横切面的场合,如访问控制、事务管理、性能检测等。 ...

muzi木子 660
上一篇: Git的使用和版本控制器的介绍
下一篇: Spring中事务的管理
Luckydogs3036
博客等级 码龄4年 2粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值