基于springboot的注解开发

1 篇文章 0 订阅
1 篇文章 0 订阅

当你想对自定义权限进行控制,或者对很多需要的接口进行日志的处理,那写一个方法在需要的类中调用就会让代码很冗余,那么使用springboot的AOP就可以很好的解决这个问题,那么我们就来看看怎么完成自定义的注解类,并实现自己想要的功能

首先,创建一个自己需要的注解类,可以在注解类中设置需要的参数,当然注解中的参数可以是有自己的默认值或者通过注解传参的方式进行传输。

import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import java.lang.annotation.*;

@Target({ElementType.METHOD})//
@Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
@Documented//说明该注解将被包含在javadoc中
//最高优先级
@Order(Ordered.HIGHEST_PRECEDENCE)
public @interface AuthorityControl {
    /**
     * 所在的警察局
     * @return
     */
    String policeStationName() default  "1"; //设置默认为1
}

完成好注解类后创建一个正常类,来进行数据处理(类中有JoinPoint和注解类authorityControl的使用)

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

import java.lang.reflect.Modifier;

/**
 * ClassName AuthorityControlRealize
 * Description
 * Create by h
 * Date 2021/10/23 11:18
 *
 * @author h
 */
@Aspect
@Component
public class AuthorityControlRealize {

    @Before("@annotation(authorityControl)")
    public void ceshi(final JoinPoint joinPoint,AuthorityControl authorityControl){
        System.out.println("目标方法名为:" + joinPoint.getSignature().getName());
        System.out.println("目标方法所属类的简单类名:" +        joinPoint.getSignature().getDeclaringType().getSimpleName());
        System.out.println("目标方法所属类的类名:" + joinPoint.getSignature().getDeclaringTypeName());
        System.out.println("目标方法声明类型:" + Modifier.toString(joinPoint.getSignature().getModifiers()));
        //获取传入目标方法的参数
        Object[] args = joinPoint.getArgs();
        for (int i = 0; i < args.length; i++) {
            System.out.println("第" + (i+1) + "个参数为:" + args[i]);
        }
        System.out.println("被代理的对象:" + joinPoint.getTarget());
        System.out.println("代理对象自己:" + joinPoint.getThis());
        // TODO: 2021/10/23 编写 权限控制逻辑   
        try {
            System.out.println("可以通过注解来进行赋值操作,现在是选择默认的选项"+authorityControl.policeStationName());
            System.out.println("----------------------------------------------");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

对注解的测试

@ApiOperation(value="测试")
@AuthorityControl
@PostMapping("/ceshi")
public ApiResponse<String> ceshi(@RequestBody GetUserInfoByAccountRequest getUserInfoByAccountRequest){
    return ApiResponse.instanceSuccessApiResponse("ok");
}

测试结果

目标方法名为:ceshi
目标方法所属类的简单类名:UserInfoController
目标方法所属类的类名:com.*.*.*.controller.api.UserInfoController
目标方法声明类型:public
第1个参数为:GetUserInfoByAccountRequest(platformAccount=我是传来的参数)
被代理的对象:com.*.*.*.controller.api.UserInfoController@5b4ce00
代理对象自己:com.*.*.*.controller.api.UserInfoController@5b4ce00
可以通过注解来进行赋值操作,现在是选择默认的选项1
----------------------------------------------
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值