com_baeldung_example_EmployeeDAOIntegrationTest_java
org.springframework.core.annotation.AnnotationUtils
@Nullable
    public static <A extends Annotation> A findAnnotation(Class<?> clazz, @Nullable Class<A> annotationType) {
        if (annotationType == null) {
            return null;
        }
        if (AnnotationFilter.PLAIN.matches(annotationType) || AnnotationsScanner.hasPlainJavaAnnotationsOnly(clazz)) {
            A annotation = clazz.getDeclaredAnnotation(annotationType);
            if (annotation != null) {
                return annotation;
            }
            Class<?> superclass = clazz.getSuperclass();
            if (superclass == null || superclass == Object.class) {
                return null;
            }
            return AnnotationUtils.findAnnotation(superclass, annotationType);
        }
        return (A)((Annotation)MergedAnnotations.from(clazz, MergedAnnotations.SearchStrategy.TYPE_HIERARCHY, RepeatableContainers.none()).get(annotationType).withNonMergedAttributes().synthesize(MergedAnnotation::isPresent).orElse(null));
    }
 -> java.util.Map.get(java.lang.Object): java.lang.Object -> java.lang.Object.hashCode(): int -> java.lang.Object.hashCode(): int -> java.lang.Object.hashCode(): int -> java.lang.ref.ReferenceQueue.poll(): java.lang.ref.Reference -> java.lang.Class.getDeclaredAnnotation(java.lang.Class): java.lang.annotation.Annotation -> java.lang.Class.getDeclaredAnnotations(): java.lang.annotation.Annotation[] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.String.startsWith(java.lang.String): boolean -> java.util.Set.add(java.lang.Object): boolean -> java.lang.Class.getDeclaredAnnotation(java.lang.Class): java.lang.annotation.Annotation -> java.lang.Class.getDeclaredAnnotations(): java.lang.annotation.Annotation[] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.String.startsWith(java.lang.String): boolean -> java.lang.annotation.Annotation.annotationType(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.String.startsWith(java.lang.String): boolean -> java.lang.annotation.Annotation.annotationType(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.String.startsWith(java.lang.String): boolean -> java.lang.Class.getInterfaces(): java.lang.Class[] -> java.lang.Class.getDeclaredAnnotation(java.lang.Class): java.lang.annotation.Annotation -> java.lang.Class.getDeclaredAnnotations(): java.lang.annotation.Annotation[] -> java.lang.Class.getInterfaces(): java.lang.Class[] -> java.lang.Class.getSuperclass(): java.lang.Class -> java.lang.Class.getSuperclass(): java.lang.Class -> java.lang.annotation.Annotation.annotationType(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.String.startsWith(java.lang.String): boolean -> java.util.Set.add(java.lang.Object): boolean -> java.lang.Class.getDeclaredAnnotation(java.lang.Class): java.lang.annotation.Annotation -> java.lang.Class.getDeclaredAnnotations(): java.lang.annotation.Annotation[] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.String.startsWith(java.lang.String): boolean -> java.lang.annotation.Annotation.annotationType(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.String.startsWith(java.lang.String): boolean -> java.lang.annotation.Annotation.annotationType(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.String.startsWith(java.lang.String): boolean -> java.lang.annotation.Annotation.annotationType(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.String.startsWith(java.lang.String): boolean -> java.lang.Class.getInterfaces(): java.lang.Class[] -> java.lang.Class.getDeclaredAnnotation(java.lang.Class): java.lang.annotation.Annotation -> java.lang.Class.getDeclaredAnnotations(): java.lang.annotation.Annotation[] -> java.lang.Class.getInterfaces(): java.lang.Class[] -> java.lang.Class.getSuperclass(): java.lang.Class -> java.lang.Class.getSuperclass(): java.lang.Class -> java.lang.annotation.Annotation.annotationType(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.String.startsWith(java.lang.String): boolean -> java.util.Set.add(java.lang.Object): boolean -> java.lang.Class.getDeclaredAnnotation(java.lang.Class): java.lang.annotation.Annotation -> java.lang.Class.getDeclaredAnnotations(): java.lang.annotation.Annotation[] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.String.startsWith(java.lang.String): boolean -> java.lang.annotation.Annotation.annotationType(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.String.startsWith(java.lang.String): boolean -> java.lang.annotation.Annotation.annotationType(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.String.startsWith(java.lang.String): boolean -> java.lang.annotation.Annotation.annotationType(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.String.startsWith(java.lang.String): boolean -> java.lang.Class.getInterfaces(): java.lang.Class[] -> java.lang.Class.getDeclaredAnnotation(java.lang.Class): java.lang.annotation.Annotation -> java.lang.Class.getDeclaredAnnotations(): java.lang.annotation.Annotation[] -> java.lang.Class.getInterfaces(): java.lang.Class[] -> java.lang.Class.getSuperclass(): java.lang.Class -> java.lang.Class.getSuperclass(): java.lang.Class -> java.lang.Class.getInterfaces(): java.lang.Class[] -> java.lang.Class.getSuperclass(): java.lang.Class
 [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] -> java.util.Map.get(java.lang.Object): java.lang.Object [CALL] [CALL] [CALL] [CALL] -> java.lang.Object.hashCode(): int [CALL] -> java.lang.Object.hashCode(): int -> java.lang.Object.hashCode(): int [EXIT] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] -> java.lang.ref.ReferenceQueue.poll(): java.lang.ref.Reference [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] -> java.lang.Class.getDeclaredAnnotation(java.lang.Class): java.lang.annotation.Annotation -> java.lang.Class.getDeclaredAnnotations(): java.lang.annotation.Annotation[] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class [CALL] -> java.lang.Class.getName(): java.lang.String [CALL] -> java.lang.String.startsWith(java.lang.String): boolean [EXIT] [EXIT] -> java.util.Set.add(java.lang.Object): boolean [CALL] -> java.lang.Class.getDeclaredAnnotation(java.lang.Class): java.lang.annotation.Annotation -> java.lang.Class.getDeclaredAnnotations(): java.lang.annotation.Annotation[] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class [CALL] -> java.lang.Class.getName(): java.lang.String [CALL] -> java.lang.String.startsWith(java.lang.String): boolean [EXIT] [EXIT] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class [CALL] -> java.lang.Class.getName(): java.lang.String [CALL] -> java.lang.String.startsWith(java.lang.String): boolean [EXIT] [EXIT] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class [CALL] -> java.lang.Class.getName(): java.lang.String [CALL] -> java.lang.String.startsWith(java.lang.String): boolean [EXIT] [EXIT] -> java.lang.Class.getInterfaces(): java.lang.Class[] [CALL] -> java.lang.Class.getDeclaredAnnotation(java.lang.Class): java.lang.annotation.Annotation -> java.lang.Class.getDeclaredAnnotations(): java.lang.annotation.Annotation[] -> java.lang.Class.getInterfaces(): java.lang.Class[] -> java.lang.Class.getSuperclass(): java.lang.Class [EXIT] -> java.lang.Class.getSuperclass(): java.lang.Class [EXIT] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class [CALL] -> java.lang.Class.getName(): java.lang.String [CALL] -> java.lang.String.startsWith(java.lang.String): boolean [EXIT] [EXIT] -> java.util.Set.add(java.lang.Object): boolean [CALL] -> java.lang.Class.getDeclaredAnnotation(java.lang.Class): java.lang.annotation.Annotation -> java.lang.Class.getDeclaredAnnotations(): java.lang.annotation.Annotation[] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class [CALL] -> java.lang.Class.getName(): java.lang.String [CALL] -> java.lang.String.startsWith(java.lang.String): boolean [EXIT] [EXIT] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class [CALL] -> java.lang.Class.getName(): java.lang.String [CALL] -> java.lang.String.startsWith(java.lang.String): boolean [EXIT] [EXIT] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class [CALL] -> java.lang.Class.getName(): java.lang.String [CALL] -> java.lang.String.startsWith(java.lang.String): boolean [EXIT] [EXIT] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class [CALL] -> java.lang.Class.getName(): java.lang.String [CALL] -> java.lang.String.startsWith(java.lang.String): boolean [EXIT] [EXIT] -> java.lang.Class.getInterfaces(): java.lang.Class[] [CALL] -> java.lang.Class.getDeclaredAnnotation(java.lang.Class): java.lang.annotation.Annotation -> java.lang.Class.getDeclaredAnnotations(): java.lang.annotation.Annotation[] -> java.lang.Class.getInterfaces(): java.lang.Class[] -> java.lang.Class.getSuperclass(): java.lang.Class [EXIT] -> java.lang.Class.getSuperclass(): java.lang.Class [EXIT] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class [CALL] -> java.lang.Class.getName(): java.lang.String [CALL] -> java.lang.String.startsWith(java.lang.String): boolean [EXIT] [EXIT] -> java.util.Set.add(java.lang.Object): boolean [CALL] -> java.lang.Class.getDeclaredAnnotation(java.lang.Class): java.lang.annotation.Annotation -> java.lang.Class.getDeclaredAnnotations(): java.lang.annotation.Annotation[] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class [CALL] -> java.lang.Class.getName(): java.lang.String [CALL] -> java.lang.String.startsWith(java.lang.String): boolean [EXIT] [EXIT] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class [CALL] -> java.lang.Class.getName(): java.lang.String [CALL] -> java.lang.String.startsWith(java.lang.String): boolean [EXIT] [EXIT] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class [CALL] -> java.lang.Class.getName(): java.lang.String [CALL] -> java.lang.String.startsWith(java.lang.String): boolean [EXIT] [EXIT] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class [CALL] -> java.lang.Class.getName(): java.lang.String [CALL] -> java.lang.String.startsWith(java.lang.String): boolean [EXIT] [EXIT] -> java.lang.Class.getInterfaces(): java.lang.Class[] [CALL] -> java.lang.Class.getDeclaredAnnotation(java.lang.Class): java.lang.annotation.Annotation -> java.lang.Class.getDeclaredAnnotations(): java.lang.annotation.Annotation[] -> java.lang.Class.getInterfaces(): java.lang.Class[] -> java.lang.Class.getSuperclass(): java.lang.Class [EXIT] -> java.lang.Class.getSuperclass(): java.lang.Class [EXIT] -> java.lang.Class.getInterfaces(): java.lang.Class[] -> java.lang.Class.getSuperclass(): java.lang.Class [EXIT] [EXIT] [EXIT]