AOP切面、动态代理

news2024/7/7 16:43:09

目录

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

二、切点是怎么定义的?

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

四、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.coloradmin.cn/o/1894242.html

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

相关文章

命令行升级ubuntu版本过程中出现的grub问题 解决

1、问题描述 使用命令行升级ubuntu18到20版本后,系统提示重启,使用reboot命令重启后,不显示服务器ip,或是显示但无法ssh远程连接服务器了,使用屏幕连接服务器后发现出现grub问题。 2、问题经过 命令行输入如下升级u…

目标检测入门:3.目标检测损失函数(IOU、GIOU、GIOU)

目录 一、IOU 二、GIOU 三、DIOU 四、DIOU_Loss实战 在前面两章里面训练模型时,损失函数都是选择L1Loss(平均绝对值误差(MAE))损失函数,L1Loss损失函数公式如下: 由公式可知,L1Loss损失函数…

JAVA学习笔记2

一、加号使用 二、数据类型 bit:计算机中的最小存储单位 byte(字节):计算机中基本存储单元,1byte8bit 浮点数符号位指数位尾数位 浮点数默认为double类型

Truenas scale入坑

家里有一台刚上大学时配的电脑,看着无用武之地,又还能用,于是想那它来搞个私有云nas。 一、选择想要入的坑 一开始对这块没什么了解和概念,最早是在旧主机上安装了个Ubuntu,然后再安装CassOS小尝试了下。可能CassOS里…

Android 10.0 关于定制自适应AdaptiveIconDrawable类型的动态时钟图标的功能实现系列一

1.前言 在10.0的系统rom定制化开发中,在关于定制动态时钟图标中,原系统是不支持动态时钟图标的功能,所以就需要从新 定制动态时钟图标关于自适应AdaptiveIconDrawable类型的样式,就是可以支持当改变系统图标样式变化时,动态时钟 图标的背景图形也跟着改变,所以接下来就来…

揭开北斗系统和物联网的神秘面纱:探索未来技术的无限可能性

北斗系统和物联网是现代科技领域的两个重要概念。随着科学技术的快速发展和应用的深化,这两个术语逐渐进入人们的视野。本文将深入探讨北斗系统和物联网的原理、应用和未来发展前景,带您充分了解科技革命的幕后故事。北斗系统:引领全球导航新…

双指针算法:快速排序模拟实现

目录 1.思路解析 2:代码展示 1.思路解析 使用双指针pre和cur 指针cur用于检测符合条件的数据 cur和pre数据发生交换用于将符合条件的数据(比key小)向左扔 一轮循环结束时,以pre为分界点,除去key,pre左边的…

[单master节点部署]14.deamonSet和配置管理中心

Deamonset deamonSet可以保证集群的每一个物理节点上都可以运行某些服务的一个pod,就是说集群增加一个node,他自动在这个node上部署该服务。这适合监控、日志收集等服务。 部署deamonset: apiVsersion: apps/v1 kind: DeamonSet metadata:…

ThinkPHP定时任务是怎样实现的?

接到一个需求:定时检查设备信息,2分钟没有心跳的机器,推送消息给相关人员,用thinkphp5框架,利用框架自带的任务功能与crontab配合来完成定时任务。 第一步:分析需求 先写获取设备信息,2分钟之…

华为5288 V5服务器安装BCLinux8U4手记

本文记录了华为5288 V5服务器安装BCLinux8U4操作系统的过程。 一、系统环境 1、服务器 华为FusionServer Pro 5288 V5服务器 2、操作系统 BCLinux-R8-U4-Server-x86_64-220725.iso 官网下载地址 sha256sum:1d31d3b8e02279e89965bd3bea61f14c65b9d32ad2ab6d4eb…

基于Java的壁纸网站设计与实现

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

JavaFx基础知识

1.Stage 舞台 如此这样的一个框框,舞台只是这个框框,并不管里面的内容 public void start(Stage primaryStage) throws Exception {primaryStage.setScene(new Scene(new Group()));primaryStage.getIcons().add(new Image("/icon/img.png"))…

HQ-SAM

不建议复现

腾讯云COS分布式对象存储

腾讯云COS分布式对象存储 腾讯云对象存储(Cloud Object Storage,COS)是腾讯云提供的一种用于存储海量文件的分布式存储服务。 腾讯云 COS 适用于多种场景,如静态网站托管、大规模数据备份和归档、多媒体存储和处理、移动应用数据存…

电脑彻底删除的文件还能恢复吗怎么弄 电脑删除的文件怎么恢复 回收站也删了

实测可行的文件恢复方法,无论是彻底删除的文件,还是被清空的回收站文件,使用该方法都可以轻松找回。整个恢复过程操作简单,并且绝不会损伤电脑硬件。这意味着,您再也不用为误删文件而焦虑了。有关电脑彻底删除的文件还…

在windows上安装objection

安装命令pip install objection -i https://mirrors.aliyun.com/pypi/simple hook指定进程 objection -g 测试 explore 进程名不定是包名,也可能是app名字,如“测试”就是app的名字 若出现如下错误,说明python 缺少setuptools 直接安装setu…

编程语言中浅拷贝(Shallow Copy)和深拷贝(Deep Copy)

编程语言中浅拷贝(Shallow Copy)和深拷贝(Deep Copy) 编程语言中浅拷贝(Shallow Copy)和深拷贝(Deep Copy)概念及JavaScript、Python、C、Java深拷贝和浅拷贝情况介绍。 浅拷贝和深拷…

【Redis】三大Redis内存分析工具介绍(Redisinsight、RDR、RMA)

目录 一、RedisInsight工具介绍 1、工具概述 2、关键特性 3、版本与服务 4、实际应用 二、Redis Data Reveal工具介绍 1、简介 2、主要特性 3、使用方法 4、注意事项 5、总结 三、Redis Memory Analyzer (RMA)工具介绍 1、工具概述 2、技术特点 3、应用场景 4、…

day02-统计数据

numpy统计学 1.求平均值[数组名.mean()/np.mean(数组名)] m1 np.arange(20).reshape((4,5))m1.mean() #9.5若想要求某一维的平均值,设置axis参数,多维数组元素指定: axis 0,将从上往下计算。axis 1,将从左往右计算…

使用getline()从文件中读取一行字符串

我们知道,getline() 方法定义在 istream 类中,而 fstream 和 ifstream 类继承自 istream 类,因此 fstream 和 ifstream 的类对象可以调用 getline() 成员方法。 当文件流对象调用 getline() 方法时,该方法的功能就变成了从指定文件…