首页 > 其他分享 >自定义注解,切面

自定义注解,切面

时间:2023-02-03 18:55:47浏览次数:59  
标签:FlushRedis 自定义 void 切面 注解 执行 public

1.定义注解FlushRedis

@Target(ElementType.METHOD) // 注解用来修饰方法
@Retention(RetentionPolicy.RUNTIME) // 运行时
@Documented // 文档
public @interface FlushRedis {
}

2.使用注解

@Transactional(rollbackFor = Exception.class)
@Override
@FlushRedis
public void updateResGroupSwitch(AlarmDescDetailsDto request) {
	// 业务逻辑
}

3.定义AOP切面

注解的功能是方法返回结果后自动执行某些代码

@Slf4j
@Aspect // 定义切面
@Component
public class FlushRedisAspect {

    @Autowired
    ResGroupDaoService resGroupDaoService;

    @Autowired
    AlarmRuleNewDaoService alarmRuleNewDaoService;

    AlarmRuleNewConverter middleDataConvert = new AlarmRuleNewConverter();
    AlarmRuleFlinkConverter converter = new AlarmRuleFlinkConverter();

    @Pointcut("@annotation(delta.service.annotation.FlushRedis)") // 以应用了FlushRedis注解的为切面点
    public void flushPointCut() {

    }

    @Before("flushPointCut()") // 切入点之前执行的
    private void before() throws Exception {

    }

    @AfterReturning(pointcut = "flushPointCut()") // 注解修饰的方法返回结果后执行
    private void afterReturning(JoinPoint joinPoint) {
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        Method method = signature.getMethod(); // 获取修饰的方法
        FlushRedis flushAnnotation = method.getAnnotation(FlushRedis.class); // 判断方法是否有FlushRedis注解
        if (flushAnnotation == null) {
            return;
        }
		// 获取切入点的方法的参数
        Object[] args = joinPoint.getArgs();
        try {
		   // 转成真正代码里的数据类型
            AlarmDescDetailsDto alarmDescDetailsDto = (AlarmDescDetailsDto) args[0];
            String resGroupCode = alarmDescDetailsDto.getDefinition();
			// 执行业务逻辑
            syncToRedis(resGroupCode);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
    }

    public void syncToRedis(String resGroupCode) {
	    // 事务提交后才执行某些动作,这是注册了一个同步的动作,提交完事务后自动改执行afterCommit方法
        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
            @Override
            public void afterCommit() {
				// 提交完事务后执行的动作

            }
        });
    }
}

标签:FlushRedis,自定义,void,切面,注解,执行,public
From: https://www.cnblogs.com/PythonOrg/p/17090227.html

相关文章

  • 自定义博客园主题
    cnblogs-theme-silence主题基于cnblogs-theme-silence这个github项目和部署指南CSS样式调整主要修改字体颜色、页面宽度查找text-color:#596172,替换为:text-color:#2......
  • logback日志配置和自定义日志参数
    logback日志配置和自定义日志参数这篇文章记录了一些日志的配置方式和示例基础的,可以直接用的logback配置文件这个配置文件可以直接用,只需要按照自己需要修改日志文件......
  • python-json的自定义编码器与自定义解码器
    json的数据类型有限,在实际业务中可能会遇到数据无法使用JSON编码的问题。如果我们需要转发的数据有大量或位置不规则的json无法解析数据类型时,事先处理就变成了一件比较麻......
  • Aop @AfterReturning因返回类型不一致导致无法执行切面代码
    要做返回异常之后,所有操作回滚的操作,本来想着泛型用Object就表示所有返回类型是CommonResult并且加指定注解的都走这个通知的代码,但是如下配置,无论如何也不生效  ......
  • 【转载】@TableLogic注解(当使用了@TableLogic注解,调用update方法修改该字段的值是不会
    @TableLogic注解表示逻辑删除1、在实体类中属性加上@TableLogic注解,表示该字段是逻辑删除字段。2、增加注解后调用BaseMapper的deleteById(id)或者IService的removeById(id......
  • 【转载】MyBatis-Plus中的逻辑删除使用 (使用注解:@TableLogic)
    前言开发系统时,有时候在实现功能时,删除操作需要实现逻辑删除就是将数据标记为删除,而并非真的物理删除(非DELETE操作),查询时需要携带状态条件,确保被标记的数据不被查询到。这......
  • Java lombok包中的常用注解,便捷化开发POJO类
    lombok包中的一些常用注解如何使用Lombok?Lombok提供注解方式来提高代码的简洁性,常用注解有:   @Data   @Setter@Getter   @NonNull   @Synchronized ......
  • Spring注解开发
    Spring原始注解Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替xml配置文件可以简化配置,提高开发效率。Spring原始注解主要是替代......
  • java(20)注解
    Java注解定义Java注解又称Java标注,是在JDK5时引入的新特性,注解(也被称为元数据)。Java注解它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素......
  • KingbaseES 支持自定义异常
    KingbaseESPLSQL从V8R6C4版本开始,支持用户自定义异常。具体例子如下:createorreplaceprocedurep_test()aserror_numberEXCEPTION;xinteger:=1;begin......