使用Java扫描类并不容易。
Spring框架提供了一个名为
ClassPathScanningCandidateComponentProvider的类,可以执行你需要的操作。以下示例将在包
org.example.package中找到MyClass的所有子类。
ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false);provider.addIncludeFilter(new AssignableTypeFilter(MyClass.class));// scan in org.example.packageSet<BeanDefinition> components = provider.findCandidateComponents("org/example/package");for (BeanDefinition component : components){ Class cls = Class.forName(component.getBeanClassName()); // use class cls found}此方法的另一个好处是使用字节码分析器查找候选对象,这意味着它不会加载它扫描的所有类。



