/** * Creates and registers a component definition for a class by scanning the class and its * superclasses for method annotations. * * @param clazz Class to scan. */ @SuppressWarnings("unchecked") public void scanClass(Class<?> clazz) { for (Class<?> innerClass : clazz.getDeclaredClasses()) { scanClass(innerClass); } if (!clazz.isAnnotationPresent(annotationClass)) { return; } if (!targetClass.isAssignableFrom(clazz)) { throw new RuntimeException( annotationClass.getName() + " annotation only valid on " + targetClass.getName() + " subclass."); } doScanClass((Class<T>) clazz); }