method.isAnnotationPresent(Xxx.class)一直为null

java 复制代码
​​​​package com.dj.springtest.aspect;

import com.dj.springtest.annotation.RequireRoles;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.bind.annotation.RestController;

import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Map;

/**
 * User: ldj
 * Date: 2023/10/22
 * Time: 4:25
 * Description: No Description
 */
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class PermissionControl {

    @Autowired
    private ApplicationContext applicationContext;

    @Test
    public void test() {
        Map<String, Object> beans = applicationContext.getBeansWithAnnotation(RestController.class);
        for (Object bean : beans.values()) {
            //反射获取字节码对象
            Class clazz = bean.getClass();
            Method[] methods = clazz.getSuperclass().getDeclaredMethods();
            for (Method method : methods) {
                boolean isPresent = method.isAnnotationPresent(RequireRoles.class);
                log.info("是否存在@RequireRoles注解:{}", isPresent);
                if (isPresent) {
                    RequireRoles annotation = method.getAnnotation(RequireRoles.class);
                    log.info("roles:{}",Arrays.toString(annotation.roles()));
                }
            }
        }
    }

}
相关推荐
卓怡学长5 小时前
w210基于springboot反诈平台设计与实现
java·spring boot·spring·intellij-idea
HarmonLTS5 小时前
智盾 WAF v8.2 Ultra|下一代 Web 应用防火墙
前端
啊阿狸不会拉杆5 小时前
《计算机网络-自顶向下方法》5.7 网络管理、SNMP和NETCONF/YANG 读书笔记
开发语言·计算机网络·php
এ慕ོ冬℘゜5 小时前
前端实战:基于jQuery递归实现通用树形组织菜单(可直接复用)
前端·javascript·jquery
长友cy6 小时前
Qt官方示例D-BusListNames阅读
开发语言
萧瑟余晖6 小时前
Java深入解析篇六十一之编译器API(javax.tools)详解
java·开发语言
蜡台6 小时前
Kotlin 零基础完整版实战教程|从语法入门到Android工程实战
android·开发语言·kotlin
计算机魔术师6 小时前
英伟达据报洽谈向 Mira Murati 的 Thinking Machines Lab 投资 25 亿美元
前端
jimy16 小时前
C++ 的 “移动语义”——Move Semantics
开发语言·c++
码云数智-园园6 小时前
C++ STL 容器怎么选?vector、list、map、unordered_map 优缺点对比
java·开发语言