<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.12</version>
</dependency>
public interface Extension {
void performAction();
}
public class ExtensionImpl1 implements Extension {
@Override
public void performAction() {
}
}
public class ExtensionImpl2 implements Extension {
@Override
public void performAction() {
}
}
import org.reflections.Reflections;
import java.util.Set;
public class ExtensionRegistry {
private static Set<Class<? extends Extension>> extensionClasses;
static {
extensionClasses = reflections.getSubTypesOf(Extension.class);
}
public static Set<Class<? extends Extension>> getExtensionClasses() {
return extensionClasses;
}
}
public class Main {
public static void main(String[] args) {
Set<Class<? extends Extension>> extensionClasses = ExtensionRegistry.getExtensionClasses();
for (Class<? extends Extension> extensionClass : extensionClasses) {
try {
Extension extension = extensionClass.getDeclaredConstructor().newInstance();
extension.performAction();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}