首页 > 其他分享 >AOP 无感校验

AOP 无感校验

时间:2024-04-17 21:00:12浏览次数:12  
标签:String org 校验 无感 Result AOP import message public

import java.lang.reflect.Method;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Aspect
@Component
@Scope("protoptype")
public class Result {
     
     private Result r;
     
     @Pointcut("execution(* com.ceair.unified.ws.*..*.*(..))")
     private void log() {
     }
     
     @Before("log() && args(t))") // T建议是map或者json类型,只要原始类型里有get()方法且有一个入参可以适配所有类型。
     public <T> void before(JoinPoint joinPoint,T t) {
             try{
                 //需要校验的属性
                 String arr [] = new String []{"org","channel","name","container","signNum"};
                for(String s : arr){
                    //获得T类中的get()方法
                    Method m = t.getClass().getMethod("get", Object.class);
                    //调用t类中的get()方法,传入参数s
                    if(m.invoke(t, s) == null || m.invoke(t, s) == ""){
                        r =  Result.error(s+":不能为空");
                    }
                }
            }catch(Exception e){
                r = Result.error("unkonw exception");
            }
            r =  Result.ok();
     }
     
     @Around("log()")  
     public Object around(ProceedingJoinPoint pjp) throws Throwable{
        Object obj = null;
         if(r.getCode().equals(200)){
            obj = pjp.proceed();//调用业务...
        }else{
            //直接返回调用方,不会进入业务
            return r;
        }
         /**
          * 业务执行完....
          * 返回调用方
          * */
        return obj;
     }
     
     private Integer code;
    private String message;
    public static Result error(String message){
        Result r = new Result();
        r.setCode(-100);
        r.setMessage(message);
        return r;
    }
    
    public static Result ok(){
        Result r = new Result();
        r.setCode(200);
        return r;
    }
    
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
}

 

装饰着模式:不改变原有业务代码逻辑 增加功能。

Are you ok ?

标签:String,org,校验,无感,Result,AOP,import,message,public
From: https://www.cnblogs.com/entertain/p/18141769

相关文章

  • 反射参数校验
    importjava.lang.reflect.Method;importjava.util.HashMap;importjava.util.Map;publicclassResult{privateIntegercode;privateStringmessage;/***对外部提供的接口,有一些前置校验参数。**/publicResultgetInfo(Map......
  • Spring中入参的校验方式
    在项目中,一般对于入参的校验,我们都是放在Controller层,之前是通过if语句进行空判断,但每次都这样写比较麻烦,代码写出来也不优雅。比较幸运的是Spring框架中已经给我们提供了这样的注解,我们只要添加上相应的注解,就可以进行参数的检验,而不需要写if条件语句判断了。具体的使用方法,也......
  • Spring Boot Validation统一参数校验
    实现方式  使用 @Validated注解配合参数校验注解,比如:@NotEmpty对参数进行校验。然后对抛出的异常ControllerAdvice进行捕获然后调整输出数据。1、引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validati......
  • aop 阶段性概况
    前言对aop进行一个阶段性的总结。正文首先什么是aop呢?那么首先看aop的解决什么样的问题。publicclassProgram{publicstaticvoidMain(string[]args){}publicvoidChangePosition1(){//youroperationSavePosit......
  • C# 异或校验两种方法
    12publicbyteGetXor(byte[]data)3{4byteCheckCode=0;5intlen=data.Length;6for(inti=0;i<len;i++)7{8CheckCode^=data[i];9......
  • httprunner 4.x学习 - 05校验(validate)
    前言HttpRunner4.x内置了丰富的校验结果的方式校验方式assert缩写说明equal"eq","equals","equal"相等less_than"lt","less_than"小于less_or_equals"le","less_or_equals"小于或等于greater_than"......
  • 【Spring】AOP进阶-JoinPoint和ProceedingJoinPoint详解
    2024-04-141.前言在Spring AOP中,JoinPoint和ProceedingJoinPoint都是关键的接口,用于在切面中获取方法的相关信息以及控制方法的执行。它们的主要区别在于它们在AOP通知中的使用方式和功能。2.JoinPoint简介Joinpoint是面向切面编程(AOP)中的一个重要概念,指的是在应用程序执行......
  • 实现自定义注解校验方法参数(AOP+自定义注解+自定义异常+全局异常捕获)
    一、实现目的在编写接口的时候,通常会先对参数进行一次校验,这样业务逻辑代码就略显冗杂,如果可以把校验参数的代码进行统一管理,在方法或者属性上直接添加注解就可以实现参数的校验,就可以提升代码编写的效率。二、实现原理通过自定义注解,注解在入参VO的属性上,设定需要满足的条件,然......
  • httprunner 4.x学习 - 04提取(extract)和校验(validate)
    前言支持2种响应结果字段提取方式:1.jmespath表达式:响应结果为JSON结构,采用jmespath表达式进行参数提取。参考教程https://jmespath.org/tutorial.html2.正则表达式(regex):返回的非JSON 格式,可以用正则表达式(regex)提取。需要具备一定的正则知识extract提取返......
  • AOP解析
    AOPbean准备1AOPsample1.1创建切面packagecom.gientech.aop.xml.util;importorg.aspectj.lang.JoinPoint;importorg.aspectj.lang.ProceedingJoinPoint;importorg.aspectj.lang.Signature;importjava.util.Arrays;publicclassLogUtil{publicvoid......