AOP切面、动态代理

目录

一、用切面做的是怎么声明切面的?(切面是怎么用的?)

二、切点是怎么定义的?

三、说一下面向切面编程?

四、AOP是怎么实现的?

五、说一下动态代理?


一、用切面做的是怎么声明切面的?切面是怎么用的?

  1. 定义切面类:使用@Aspect注解表示一个切面可以使用@Component注解或其他Spring的组件注解来让Spring容器管理这个类的实例。
  2. 定义切入点(Pointcut) 使用@Pointcut注解来定义一个切入点表达式,这个表达式描述了哪些方法将被拦截
  3. 定义通知(Advice)通知是切面中的具体逻辑,它定义了当切入点匹配的方法被调用时,应该执行哪些操作。Spring AOP支持多种类型的通知,如前置通知(Before advice)、后置通知(After advice)、环绕通知(Around advice
  4. 配置Spring AOPSpring配置文件或启动类启用AspectJ自动代理,pring Boot中,这通常是通过添加@EnableAspectJAutoProxy注解

二、切点是怎么定义的?

  1. execution:表示这是一个execution类型的切点表达式。
  2. 方法修饰符(可选):如public、private等,默认为任意修饰符。
  3. 返回类型模式:如void、int、java.util.List等,表示方法的返回类型。
  4. 声明类型模式(可选):如com.example.MyClass,表示方法所属的类。
  5. 方法名称模式:如myMethod、*Method等,表示方法名称。
  6. 参数模式:如(java.lang.String,int)、(..)表示任意参数等,表示方法的参数类型。
  7. 抛出异常模式(可选):如java.lang.Exception,表示方法抛出的异常类型。

三、说一下面向切面编程?

        是一种编程范式(简称AOP),通过横切关注点的方式来解耦系统中的各个模块。

        切面(Aspect):是横切关注点的实现,它是一个包含了横切关注点代码的模块

        连接点(Joinpoint):是在程序执行过程中能够插入切面代码的点

        切点(Pointcut):用于定义哪些连接点将被切面织入

        通知(Advice):是切面的具体实现,它定义了切面在何时以何种方式织入到目标连接点上

        织入(Weaving):是将切面代码与目标代码合并的过

四、AOP是怎么实现的?

        AOP的实现方式主要分为静态AOP和动态AOP两种:

        静态AOP:在编译阶段对程序的需要增强的代码进行修改,从而生成静态的AOP代理类。这种方式的实现需要特殊的编译器支持,如AspectJ。

        动态AOP:在运行时动态地为目标对象生成代理对象,并在代理对象中织入切面代码。这种方式的实现通常依赖于Java的动态代理机制或CGLIB等第三方库,如Spring AOP。

五、说一下动态代理?

        是aop实现方式 分为jdk动态代理cglib

j        dk必须实现接口基于java反射代理接口不代理

        cglib通过继承方式子类重写父类方法增强cglib使用字节码创建代理对象可以代理接口也可以代理

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

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

相关文章

promise.all和promise.race的区别

Promise.all和Promise.race是JavaScript中Promise API的两个重要方法,它们在处理多个Promise对象时表现出不同的行为。以下是它们之间的主要区别: 1. 功能和行为 Promise.all: 功能:接收一个包含多个Promise的数组&#x…

【leetcode--逆波兰表达式】

今天学逆波兰表达式撰写还顺便复习了一下二叉树的前中后序遍历: 前序遍历:根左右 中序遍历:左根右 后序遍历:左右根 本题两个要点: a.判断字符串中的元素是数字还是字符串 因为Python 中没有一个函数可以判断一个字…

138. 完美数(卡码网周赛第二十四期(23年腾讯音乐笔试真题))

138. 完美数&#xff08;卡码网周赛第二十四期&#xff08;23年腾讯音乐笔试真题&#xff09;&#xff09; 题目描述 小红定义一个数为“完美数”&#xff0c;当且仅当该数仅有一个非零数字。例如 5000, 4, 1, 10, 200 都是完美数。 小红拿到了一个大小为 n&#xff08;2 <…

HarmonyOS APP应用开发项目- MCA助手(Day02持续更新中~)

简言&#xff1a; gitee地址&#xff1a;https://gitee.com/whltaoin_admin/money-controller-app.git端云一体化开发在线文档&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/agc-harmonyos-clouddev-view-0000001700053733-V5注&#xff1a;…

Laravel为什么会成为最优雅的PHP框架

PHP作为一种广泛应用的服务器端脚本语言&#xff0c;拥有着丰富的Web开发框架。其中&#xff0c;Laravel凭借其简洁优雅的语法、强大的功能集、优秀的文档与社区支持以及高度可扩展性&#xff0c;成为了许多开发者心目中的首选框架。本文将深入探讨Laravel为何能够在众多PHP框架…

【Sping Boot2】笔记

Spring Boot 2入门 如何创建一个Spring Boot的Web例子&#xff1f;1.如何创建一个Spring Boot项目1.1 使用Maven构建一个Spring Boot 2项目1.1.1创建Maven工程注&#xff1a;Maven项目结构&#xff1a; 1.1.2引入SpingBoot相关依赖依赖注意事项&#xff1a; 1.1.3创建主类1.1.4…

VIM介绍

VIM&#xff08;Vi IMproved&#xff09;是一种高度可配置的文本编辑器&#xff0c;用于有效地创建和更改任何类型的文本。它是从 vi 编辑器发展而来的&#xff0c;后者最初是 UNIX 系统上的一个文本编辑器。VIM 以其键盘驱动的界面和强大的文本处理能力而闻名&#xff0c;是许…

Python学习之小游戏--坦克大作战

今天跟视频学习了Python实现坦克大作战小游戏&#xff0c;挺有意思的&#xff0c;一起来玩吧~ 按空格发射子弹&#xff0c;上下左右键实现移动&#xff0c;ESC键无限复活。 import pygame,time,random from pygame.sprite import Sprite SCREEN_WIDTH800 SCREEN_HEIGHT500 BG…

Vue3中为Ant Design Vue中Modal.confirm自定义内容

在一次业务开发时代码时&#xff0c;碰到了一种既想要Modal.confirm样式&#xff0c;又想要定制其content内容的情况。 大部分情况下&#xff0c;使用Modal.method()这种方式时&#xff0c;可能content内容固定都是字符串&#xff0c;那如果想要做更高级的交互怎么办&#xff…

用Docker搭建分布式 Redis 的方法

使用 Docker 搭建一个分布式的 Redis 集群可以帮助你快速部署和管理多个 Redis 实例。一个典型的 Redis 集群包括多个主从节点&#xff0c;通过分片来实现数据的分布式存储与高可用性。 以下是使用 Docker 搭建分布式 Redis 集群的详细步骤&#xff1a; 前提条件 安装 Docke…

【Git-驯化】一文学会git配置用户信息,git config用法细节

【Git-驯化】一文学会git配置用户信息&#xff0c;git config用法细节 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内容文档…

通过 url 下载文件的浏览器插件

大多数情况下访问 url 就会开始下载文件&#xff0c;但是由于文件格式等原因&#xff0c;下载可能不会开始或者失败&#xff0c;这时可以使用一些浏览器插件&#xff0c;例如 https://chromewebstore.google.com/detail/download-file-%E4%B8%8B%E8%BD%BD%E6%96%87%E4%BB%B6/do…

Sourcecodester Fantastic Blog CMS v1.0 SQL 注入漏洞(CVE-2022-28512)

前言 CVE-2022-28512 是一个存在于 Sourcecodester Fantastic Blog CMS v1.0 中的 SQL 注入漏洞。攻击者可以通过 "/fantasticblog/single.php" 中的 id 参数注入恶意 SQL 查询&#xff0c;从而获得对数据库的未经授权的访问和控制。 漏洞详细信息 漏洞描述: 该漏…

2024 年第十四届 APMCM 亚太地区大学生数学建模竞赛赛题浅析

一图流&#xff1a; 赛题编号 赛题名称 涉及学科 所需模型 赛题复杂度 赛题难度 主要挑战 A 飞行器外形的优化问题 航空航天工程&#xff0c;数学&#xff0c;物理 几何模型&#xff0c;空气动力学模型&#xff0c;优化算法 高 高 精确计算飞行器表面积和体积&…

工具发送formdata请求 Multipartfile 接收

1.需求&#xff1a; 接收到 (Multipartfile file 文件 》使用工具转发到别的请求&#xff0c;将文件传到别的接口 主要代码&#xff1a; InputStreamResource inputstreamResource new InputstreamResource(file.getInputstream(), file.getoriginalfilename());MultiReso…

全网都在疯传的最新蓝海风口项目!

最近全网都在疯传这种视频&#xff0c;想必兄弟们都见到过了&#xff01; 大家看这个号&#xff0c;1天的时间&#xff0c;2个作品&#xff0c;第2个直接就爆了&#xff0c;昨天看点赞还是3.8w&#xff0c;今天已经10w了&#xff0c;这是妥妥的风口啊&#xff01; 大家有没有想…

应用在灯带Type-C接口上的PD SINK协议芯片ECP5701/ECP5702获取充电器的5V、9V、12V、15V、20V供电

方案背景 近日&#xff0c;欧盟就统一充电器接口的提案达成了一项政治协议&#xff0c;其中规定了在欧盟地区销售的所有手机或其他便携式中小型电子设备必须采用统一的USB Type-C接口。这项决定意味着未来将会有更多的产品强制性地使用TYPE-C充电接口。 在这个背景下&#xf…

day10:01集合

1 作用 Python中的集合&#xff08;Set&#xff09;是一个无序的、不包含重复元素的容器。它主要用于去重、成员测试、以及执行数学上的集合运算&#xff08;如并集、交集、差集和对称差集&#xff09;等操作。集合的内部实现通常基于哈希表&#xff0c;这提供了快速的成员测试…

wordpress 付费主题modown分享,可实现资源付费

该主题下载地址 下载地址 简介 Modown是基于Erphpdown 会员下载插件开发的付费下载资源、付费下载源码、收费附件下载、付费阅读查看隐藏内容、团购下载的WordPress主题&#xff0c;一款针对收费付费下载资源/付费查看内容/付费阅读/付费视频/VIP会员免费下载查看/虚拟资源售…

IT专业入门,高考假期预习指南:运维方向

七月来临&#xff0c;各省高考分数已揭榜完成。而高考的完结并不意味着学习的结束&#xff0c;而是新旅程的开始。对于有志于踏入IT领域&#xff0c;尤其是想要学习运维方向的高考少年们&#xff0c;这个假期是开启探索IT世界的绝佳时机。提供一份全面的学习路线图&#xff0c;…