栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

基于springboot的注解开发

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于springboot的注解开发

当你想对自定义权限进行控制,或者对很多需要的接口进行日志的处理,那写一个方法在需要的类中调用就会让代码很冗余,那么使用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 {
    
    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;


@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 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
----------------------------------------------
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/349109.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号