AOP的妙用

news/2024/10/30 21:27:39/

一、改代码

自定义注解用于提示该代码已经在AOP中重构了

public @interface ReviseToAop {// 用于记录修改状态String value() default "";
}

使用注解(无意义,只是表名被修改)

   @ReviseToAop("修改于:2023/7/30")@GetMapping("/nm/{id}")public String Nm(@PathVariable("id") Integer id,@PathParam("name") String name) throws InterruptedException {log.info("当前未被修改的方法-------");return "当前未被修改的方法 id:"+id;}

aop中重构代码

监控类上的注解用@within(注解包地址)

监控方法上的注解用@annotation(注解地址)

监控方法用execution(权限类型 返回值类型 方法地址(参数类型))

    @Around("@annotation(com.example.demo.demos.contorl.ReviseToAop) && execution(String com.example.demo.demos.contorl.Hello.Nm(Integer,String))")public Object ReviseNm(ProceedingJoinPoint joinPoint) throws Throwable {Object[] args = joinPoint.getArgs();log.info("数据被修改----");return   "已经被修改: "+args[0]+"name:"+args[1];}

二、自定义注解

设置一个类似@Value注解实现基本类型的数据注入

自定义注解

@Target({ElementType.TYPE, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyValue {String value() default "";
}

@MyValue需要在@RestController下才能生效

    @Around("@within(org.springframework.web.bind.annotation.RestController)")public  Object setValue(ProceedingJoinPoint joinPoint) throws Throwable {Object target = joinPoint.getTarget();Field[] declaredFields = target.getClass().getDeclaredFields();for(Field field:declaredFields){field.setAccessible(true);MyValue annotation = field.getAnnotation(MyValue.class);if(!Objects.isNull(annotation)) {field.set(target, annotation.value());log.info("当前对象:{},当前字段:{},当前类名赋值:{}", joinPoint.getTarget().getClass().getName(), field.getName(),annotation.value());}}return   joinPoint.proceed(joinPoint.getArgs());}
ProceedingJoinPoint 对象
JoinPoint.getTarget() 获得当前对象joinPoint.getArgs() 获得当前参数
joinPoint.getTarget().getClass() 获得当前对象类的反射


http://www.ppmy.cn/news/991403.html

相关文章

CUDA常用函数

cudaDeviceSynchronize cudaDeviceSynchronize是一个CUDA函数,用于同步当前设备上的所有CUDA流。它会阻塞调用它的线程,直到所有设备上的CUDA流都执行完为止。这可以确保在进行后续的CUDA操作时,先前的操作已经完成。 在CUDA程序中&#xff0…

数字图像处理(番外)图像增强

图像增强 图像增强的方法是通过一定手段对原图像附加一些信息或变换数据,有选择地突出图像中感兴趣的特征或者抑制(掩盖)图像中某些不需要的特征,使图像与视觉响应特性相匹配。 图像对比度 图像对比度计算方式如下: C ∑ δ δ ( i , j …

一位大咖写给软件编程新手的建议 - 经验谈

今天逛微信公众号的时候看到一个文,关于给软件新手建议的事情。看了之后有一点想法,然后就思考了下,觉得有必要记录一下自己的建议,所以就有了此博文。 这里提一下,笔者自己非计算机专业,但是在学校的时候就…

关于Deit中的知识蒸馏(Knowledge Distillation)详解(附损失函数代码)

文章目录 1. 知识蒸馏的作用2. 知识蒸馏的一般步骤1. 准备数据集2. 训练教师模型3. 得到教师模型输出4. 准备学生模型5. 定义损失函数6. 进行知识蒸馏训练7. 调节温度参数 3. Deit中选用的教师模型为什么是ConvNet?4. 软标签和硬标签5. 知识蒸馏在Deit代码中的体现 …

JavaScript高级——ES6基础入门

目录 前言let 和 const块级作用域模板字符串一.模板字符串是什么二.模板字符串的注意事项三. 模板字符串的应用 箭头函数一.箭头函数是什么二.普通函数与箭头函数的转换三.this指向1. 全局作用域中的 this 指向2. 一般函数(非箭头函数)中的this指向3.箭头…

R-并行计算

本文介绍在计算机多核上通过parallel包进行并行计算。 并行计算运算步骤: 加载并行计算包,如library(parallel)。创建几个“workers”,通常一个workers一个核(core);这些workers什么都不知道,它们的全局环…

【宏定义】——检验条件是否成立,并返回指定的值

文章目录 功能说明实现示例解析扩展 功能说明 宏检验条件是否成立,并返回指定的值 #define TU_VERIFY(...) _GET_3RD_ARG(__VA_ARGS__, TU_VERIFY_2ARGS, TU_VERIFY_1ARGS, UNUSED)(__VA_ARGS__)TU_VERIFY(1) 检验为真,啥也不干TU_VERIFY(0) 校验为假&…

1400*B. I Hate 1111(思维+数学)

Example input 3 33 144 69 output YES YES NO 题意: 问一个数字是否可以由 11,111,1111,11111...... 任意倍数加和所得。 解析: 可以观察到 1111%110,11111%1110,而后面更大的11111111…