From a32d80379b085ed0751aacdc2187ea06bb91fab2 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 31 Aug 2011 21:22:47 +0200 Subject: [PATCH] DATACMNS-69 - Added caching to RepositoryInterfaceAwareBeanPostProcessor. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Actual types resolved in getClassForPropertyValue(…) get cached now to avoid unnecessary attempt to load classes. --- ...sitoryInterfaceAwareBeanPostProcessor.java | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/repository/core/support/RepositoryInterfaceAwareBeanPostProcessor.java b/spring-data-commons-core/src/main/java/org/springframework/data/repository/core/support/RepositoryInterfaceAwareBeanPostProcessor.java index 575337cdd..cba461c59 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/repository/core/support/RepositoryInterfaceAwareBeanPostProcessor.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/repository/core/support/RepositoryInterfaceAwareBeanPostProcessor.java @@ -15,6 +15,9 @@ */ package org.springframework.data.repository.core.support; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + import org.springframework.beans.PropertyValue; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; @@ -42,16 +45,14 @@ class RepositoryInterfaceAwareBeanPostProcessor extends private static final Class REPOSITORY_TYPE = RepositoryFactoryBeanSupport.class; + private final Map, Class> cache = new ConcurrentHashMap, Class>(); private ConfigurableListableBeanFactory context; /* - * (non-Javadoc) - * - * @see - * org.springframework.beans.factory.BeanFactoryAware#setBeanFactory(org - * .springframework.beans.factory.BeanFactory) - */ + * (non-Javadoc) + * @see org.springframework.beans.factory.BeanFactoryAware#setBeanFactory(org.springframework.beans.factory.BeanFactory) + */ public void setBeanFactory(BeanFactory beanFactory) { if (beanFactory instanceof ConfigurableListableBeanFactory) { @@ -61,12 +62,9 @@ class RepositoryInterfaceAwareBeanPostProcessor extends /* - * (non-Javadoc) - * - * @see org.springframework.beans.factory.config. - * InstantiationAwareBeanPostProcessorAdapter - * #predictBeanType(java.lang.Class, java.lang.String) - */ + * (non-Javadoc) + * @see org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter#predictBeanType(java.lang.Class, java.lang.String) + */ @Override public Class predictBeanType(Class beanClass, String beanName) { @@ -78,8 +76,15 @@ class RepositoryInterfaceAwareBeanPostProcessor extends PropertyValue value = definition.getPropertyValues().getPropertyValue( "repositoryInterface"); + + if (cache.containsKey(beanClass)) { + return cache.get(beanClass); + } + + Class resolvedBeanClass = getClassForPropertyValue(value); + cache.put(beanClass, resolvedBeanClass); - return getClassForPropertyValue(value); + return resolvedBeanClass; }