Единственное известное мне решение - это java Reflection, вам нужно будет отсканировать пакет, затем проверить аннотацию, а затем конструктор по умолчанию, попробовать этот тестовый класс, который будет печатать классы без конструктора по умолчанию.
public class TestListIni {
String scaningPackage = "your package name";
public void startTesting() {
List<ClassLoader> classLoadersList = new LinkedList<ClassLoader>();
classLoadersList.add(ClasspathHelper.contextClassLoader());
classLoadersList.add(ClasspathHelper.staticClassLoader());
Reflections reflections = new Reflections(
new ConfigurationBuilder().setScanners(new SubTypesScanner(false), new ResourcesScanner())
.setUrls(ClasspathHelper.forClassLoader(classLoadersList.toArray(new ClassLoader[0])))
.filterInputsBy(new FilterBuilder().include(FilterBuilder.prefix(scaningPackage))));
Set<Class<? extends Object>> allClasses = reflections.getSubTypesOf(Object.class);
allClasses.forEach(oneClass -> {
RestController addTotest = oneClass.getAnnotation(RestController.class);
if (addTotest != null) {
//check for default constructor
boolean flag = hasParameterlessPublicConstructor(oneClass);
if(!flag){
sysout("this has no default constructor " oneClass.getName());
}
} else {
System.err.println("Scanned and exclued class " + oneClass.getName());
}
});
}
private boolean hasParameterlessPublicConstructor(Class<?> clazz) {
for (Constructor<?> constructor : clazz.getConstructors()) {
if (constructor.getParameterCount() == 0) {
return true;
}
}
return false;
}
}
зависимость:
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.11</version>
</dependency>