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
相关产品推荐
相关产品推荐

