You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Reflections问题:仅获取指定类中带@Before注解的方法

问题原因与解决方案

你遇到的核心问题是Reflections的扫描范围太广——当前配置应该是扫描了ru.package整个包(包括所有子包),所以它会把这个范围内所有类的@Before方法都收集回来,而不是只针对MyTestClass。

下面给你两个精准解决的方案:

方案一:直接指定目标类扫描(推荐,更高效)

不要扫描整个包,而是直接告诉Reflections只检查MyTestClass这个类,这样就能精准获取它的@Before方法:

Reflections reflections = new Reflections(new ConfigurationBuilder()
    .forClass(MyTestClass.class) // 直接指定要分析的类
    .addScanners(new MethodAnnotationsScanner())); // 只启用方法注解扫描器

// 此时获取的就是MyTestClass中所有带@Before的方法
Set<Method> myTestBeforeMethods = reflections.getMethodsAnnotatedWith(Before.class);

方案二:扫描包后过滤结果(适合需保留包扫描的场景)

如果因为其他需求必须扫描整个包,那可以在获取所有@Before方法后,过滤出属于MyTestClass的部分:

Reflections reflections = new Reflections(new ConfigurationBuilder()
    .forPackage("ru.package")
    .addScanners(new MethodAnnotationsScanner()));

Set<Method> allBeforeMethods = reflections.getMethodsAnnotatedWith(Before.class);
// 过滤出声明类是MyTestClass的方法
Set<Method> myTestClassBeforeMethods = allBeforeMethods.stream()
    .filter(method -> method.getDeclaringClass().equals(MyTestClass.class))
    .collect(Collectors.toSet());

简单说,前者从根源缩小扫描范围,后者在结果层做过滤,都能解决你只获取MyTestClass中@Before方法的需求。

内容的提问来源于stack exchange,提问作者nJ93

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:51:25