Example usage for org.springframework.core.annotation AnnotatedElementUtils getMergedRepeatableAnnotations

List of usage examples for org.springframework.core.annotation AnnotatedElementUtils getMergedRepeatableAnnotations

Introduction

In this page you can find the example usage for org.springframework.core.annotation AnnotatedElementUtils getMergedRepeatableAnnotations.

Prototype

public static <A extends Annotation> Set<A> getMergedRepeatableAnnotations(AnnotatedElement element,
        Class<A> annotationType, @Nullable Class<? extends Annotation> containerType) 

Source Link

Document

Get all repeatable annotations of the specified annotationType within the annotation hierarchy above the supplied element ; and for each annotation found, merge that annotation's attributes with matching attributes from annotations in lower levels of the annotation hierarchy and synthesize the results back into an annotation of the specified annotationType .

Usage

From source file:org.springframework.jms.annotation.JmsListenerAnnotationBeanPostProcessor.java

@Override
public Object postProcessAfterInitialization(final Object bean, String beanName) throws BeansException {
    if (!this.nonAnnotatedClasses.contains(bean.getClass())) {
        Class<?> targetClass = AopProxyUtils.ultimateTargetClass(bean);
        Map<Method, Set<JmsListener>> annotatedMethods = MethodIntrospector.selectMethods(targetClass,
                (MethodIntrospector.MetadataLookup<Set<JmsListener>>) method -> {
                    Set<JmsListener> listenerMethods = AnnotatedElementUtils
                            .getMergedRepeatableAnnotations(method, JmsListener.class, JmsListeners.class);
                    return (!listenerMethods.isEmpty() ? listenerMethods : null);
                });//from w  w  w  .jav a2 s .  c o  m
        if (annotatedMethods.isEmpty()) {
            this.nonAnnotatedClasses.add(bean.getClass());
            if (logger.isTraceEnabled()) {
                logger.trace("No @JmsListener annotations found on bean type: " + bean.getClass());
            }
        } else {
            // Non-empty set of methods
            annotatedMethods.forEach((method, listeners) -> listeners
                    .forEach(listener -> processJmsListener(listener, method, bean)));
            if (logger.isDebugEnabled()) {
                logger.debug(annotatedMethods.size() + " @JmsListener methods processed on bean '" + beanName
                        + "': " + annotatedMethods);
            }
        }
    }
    return bean;
}

From source file:org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.java

@Override
public Object postProcessAfterInitialization(final Object bean, String beanName) {
    Class<?> targetClass = AopProxyUtils.ultimateTargetClass(bean);
    if (!this.nonAnnotatedClasses.contains(targetClass)) {
        Map<Method, Set<Scheduled>> annotatedMethods = MethodIntrospector.selectMethods(targetClass,
                (MethodIntrospector.MetadataLookup<Set<Scheduled>>) method -> {
                    Set<Scheduled> scheduledMethods = AnnotatedElementUtils
                            .getMergedRepeatableAnnotations(method, Scheduled.class, Schedules.class);
                    return (!scheduledMethods.isEmpty() ? scheduledMethods : null);
                });/* ww w.  ja v  a  2  s .  c o  m*/
        if (annotatedMethods.isEmpty()) {
            this.nonAnnotatedClasses.add(targetClass);
            if (logger.isTraceEnabled()) {
                logger.trace("No @Scheduled annotations found on bean class: " + bean.getClass());
            }
        } else {
            // Non-empty set of methods
            annotatedMethods.forEach((method, scheduledMethods) -> scheduledMethods
                    .forEach(scheduled -> processScheduled(scheduled, method, bean)));
            if (logger.isDebugEnabled()) {
                logger.debug(annotatedMethods.size() + " @Scheduled methods processed on bean '" + beanName
                        + "': " + annotatedMethods);
            }
        }
    }
    return bean;
}

From source file:org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener.java

/**
 * Execute SQL scripts configured via {@link Sql @Sql} for the supplied
 * {@link TestContext} and {@link ExecutionPhase}.
 *//*from   w ww.j a va 2s.  co m*/
private void executeSqlScripts(TestContext testContext, ExecutionPhase executionPhase) throws Exception {
    boolean classLevel = false;

    Set<Sql> sqlAnnotations = AnnotatedElementUtils.getMergedRepeatableAnnotations(testContext.getTestMethod(),
            Sql.class, SqlGroup.class);
    if (sqlAnnotations.isEmpty()) {
        sqlAnnotations = AnnotatedElementUtils.getMergedRepeatableAnnotations(testContext.getTestClass(),
                Sql.class, SqlGroup.class);
        if (!sqlAnnotations.isEmpty()) {
            classLevel = true;
        }
    }

    for (Sql sql : sqlAnnotations) {
        executeSqlScripts(sql, executionPhase, testContext, classLevel);
    }
}