From e566e25b6f7702858ae7d1ed6b3cbeae6bf95122 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 23 Jan 2017 12:29:38 +0100 Subject: [PATCH] Clear nonAnnotatedClasses cache in afterSingletonsInstantiated Issue: SPR-15175 --- .../ScheduledAnnotationBeanPostProcessor.java | 5 ++++- .../JmsListenerAnnotationBeanPostProcessor.java | 14 +++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/spring-context/src/main/java/org/springframework/scheduling/annotation/ScheduledAnnotationBeanPostProcessor.java b/spring-context/src/main/java/org/springframework/scheduling/annotation/ScheduledAnnotationBeanPostProcessor.java index 283aebbfc1..1399c12be1 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/annotation/ScheduledAnnotationBeanPostProcessor.java +++ b/spring-context/src/main/java/org/springframework/scheduling/annotation/ScheduledAnnotationBeanPostProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -180,6 +180,9 @@ public class ScheduledAnnotationBeanPostProcessor @Override public void afterSingletonsInstantiated() { + // Remove resolved singleton classes from cache + this.nonAnnotatedClasses.clear(); + if (this.applicationContext == null) { // Not running in an ApplicationContext -> register tasks early... finishRegistration(); diff --git a/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListenerAnnotationBeanPostProcessor.java b/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListenerAnnotationBeanPostProcessor.java index fc3dd98053..0dff701db6 100644 --- a/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListenerAnnotationBeanPostProcessor.java +++ b/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListenerAnnotationBeanPostProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -96,13 +96,13 @@ public class JmsListenerAnnotationBeanPostProcessor private String containerFactoryBeanName = DEFAULT_JMS_LISTENER_CONTAINER_FACTORY_BEAN_NAME; + private final MessageHandlerMethodFactoryAdapter messageHandlerMethodFactory = + new MessageHandlerMethodFactoryAdapter(); + private BeanFactory beanFactory; private StringValueResolver embeddedValueResolver; - private final MessageHandlerMethodFactoryAdapter messageHandlerMethodFactory = - new MessageHandlerMethodFactoryAdapter(); - private final JmsListenerEndpointRegistrar registrar = new JmsListenerEndpointRegistrar(); private final AtomicInteger counter = new AtomicInteger(); @@ -154,14 +154,17 @@ public class JmsListenerAnnotationBeanPostProcessor if (beanFactory instanceof ConfigurableBeanFactory) { this.embeddedValueResolver = new EmbeddedValueResolver((ConfigurableBeanFactory) beanFactory); } + this.registrar.setBeanFactory(beanFactory); } @Override public void afterSingletonsInstantiated() { - this.registrar.setBeanFactory(this.beanFactory); + // Remove resolved singleton classes from cache + this.nonAnnotatedClasses.clear(); if (this.beanFactory instanceof ListableBeanFactory) { + // Apply JmsListenerConfigurer beans from the BeanFactory, if any Map instances = ((ListableBeanFactory) this.beanFactory).getBeansOfType(JmsListenerConfigurer.class); for (JmsListenerConfigurer configurer : instances.values()) { @@ -170,6 +173,7 @@ public class JmsListenerAnnotationBeanPostProcessor } if (this.registrar.getEndpointRegistry() == null) { + // Determine JmsListenerEndpointRegistry bean from the BeanFactory if (this.endpointRegistry == null) { Assert.state(this.beanFactory != null, "BeanFactory must be set to find endpoint registry by bean name"); this.endpointRegistry = this.beanFactory.getBean(