Skip to content

Instantly share code, notes, and snippets.

@marcus-nl
Last active August 29, 2015 14:04
Show Gist options
  • Save marcus-nl/d7fb207f9f5cdd115909 to your computer and use it in GitHub Desktop.
Save marcus-nl/d7fb207f9f5cdd115909 to your computer and use it in GitHub Desktop.
Use Spring ResourcePatternResolver to find subclasses
@Inject
private ResourceLoader resourceLoader;
@Test
public void processClasses() throws IOException, ClassNotFoundException {
TypeFilter typeFilter = new AssignableTypeFilter(MyClass.class);
ResourcePatternResolver resourcePatternResolver = ResourcePatternUtils.getResourcePatternResolver(resourceLoader);
MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resourceLoader);
String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX +
ClassUtils.convertClassNameToResourcePath("org.my.pckg") +
"/**/*.class";
Resource[] resources = resourcePatternResolver.getResources(packageSearchPath);
for (Resource resource : resources) {
System.out.println(resource);
MetadataReader metadataReader = metadataReaderFactory.getMetadataReader(resource);
if (typeFilter.match(metadataReader, metadataReaderFactory)) {
String className = metadataReader.getClassMetadata().getClassName();
Class<?> clazz = ClassUtils.forName(className, getClass().getClassLoader());
processClass(clazz);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment