Polishing

This commit is contained in:
Juergen Hoeller 2013-10-26 15:18:34 +02:00
parent 045f78e6c5
commit 6021822ce4
2 changed files with 13 additions and 16 deletions

View File

@ -101,15 +101,14 @@ public class CachedIntrospectionResults {
/** /**
* Clear the introspection cache for the given ClassLoader, removing the * Clear the introspection cache for the given ClassLoader, removing the
* introspection results for all classes underneath that ClassLoader, * introspection results for all classes underneath that ClassLoader, and
* and deregistering the ClassLoader (and any of its children) from the * removing the ClassLoader (and its children) from the acceptance list.
* acceptance list.
* @param classLoader the ClassLoader to clear the cache for * @param classLoader the ClassLoader to clear the cache for
*/ */
public static void clearClassLoader(ClassLoader classLoader) { public static void clearClassLoader(ClassLoader classLoader) {
synchronized (classCache) { synchronized (classCache) {
for (Iterator<Class> it = classCache.keySet().iterator(); it.hasNext();) { for (Iterator<Class> it = classCache.keySet().iterator(); it.hasNext();) {
Class beanClass = it.next(); Class<?> beanClass = it.next();
if (isUnderneathClassLoader(beanClass.getClassLoader(), classLoader)) { if (isUnderneathClassLoader(beanClass.getClassLoader(), classLoader)) {
it.remove(); it.remove();
} }
@ -127,13 +126,11 @@ public class CachedIntrospectionResults {
/** /**
* Create CachedIntrospectionResults for the given bean class. * Create CachedIntrospectionResults for the given bean class.
* <P>We don't want to use synchronization here. Object references are atomic,
* so we can live with doing the occasional unnecessary lookup at startup only.
* @param beanClass the bean class to analyze * @param beanClass the bean class to analyze
* @return the corresponding CachedIntrospectionResults * @return the corresponding CachedIntrospectionResults
* @throws BeansException in case of introspection failure * @throws BeansException in case of introspection failure
*/ */
static CachedIntrospectionResults forClass(Class beanClass) throws BeansException { static CachedIntrospectionResults forClass(Class<?> beanClass) throws BeansException {
CachedIntrospectionResults results; CachedIntrospectionResults results;
Object value; Object value;
synchronized (classCache) { synchronized (classCache) {
@ -225,7 +222,7 @@ public class CachedIntrospectionResults {
* @param beanClass the bean class to analyze * @param beanClass the bean class to analyze
* @throws BeansException in case of introspection failure * @throws BeansException in case of introspection failure
*/ */
private CachedIntrospectionResults(Class beanClass) throws BeansException { private CachedIntrospectionResults(Class<?> beanClass) throws BeansException {
try { try {
if (logger.isTraceEnabled()) { if (logger.isTraceEnabled()) {
logger.trace("Getting BeanInfo for class [" + beanClass.getName() + "]"); logger.trace("Getting BeanInfo for class [" + beanClass.getName() + "]");
@ -248,7 +245,7 @@ public class CachedIntrospectionResults {
// garbage collection on class loader shutdown - we cache it here anyway, // garbage collection on class loader shutdown - we cache it here anyway,
// in a GC-friendly manner. In contrast to CachedIntrospectionResults, // in a GC-friendly manner. In contrast to CachedIntrospectionResults,
// Introspector does not use WeakReferences as values of its WeakHashMap! // Introspector does not use WeakReferences as values of its WeakHashMap!
Class classToFlush = beanClass; Class<?> classToFlush = beanClass;
do { do {
Introspector.flushFromCaches(classToFlush); Introspector.flushFromCaches(classToFlush);
classToFlush = classToFlush.getSuperclass(); classToFlush = classToFlush.getSuperclass();
@ -286,7 +283,7 @@ public class CachedIntrospectionResults {
return this.beanInfo; return this.beanInfo;
} }
Class getBeanClass() { Class<?> getBeanClass() {
return this.beanInfo.getBeanDescriptor().getBeanClass(); return this.beanInfo.getBeanDescriptor().getBeanClass();
} }
@ -314,7 +311,7 @@ public class CachedIntrospectionResults {
return pds; return pds;
} }
private PropertyDescriptor buildGenericTypeAwarePropertyDescriptor(Class beanClass, PropertyDescriptor pd) { private PropertyDescriptor buildGenericTypeAwarePropertyDescriptor(Class<?> beanClass, PropertyDescriptor pd) {
try { try {
return new GenericTypeAwarePropertyDescriptor(beanClass, pd.getName(), pd.getReadMethod(), return new GenericTypeAwarePropertyDescriptor(beanClass, pd.getName(), pd.getReadMethod(),
pd.getWriteMethod(), pd.getPropertyEditorClass()); pd.getWriteMethod(), pd.getPropertyEditorClass());

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2012 the original author or authors. * Copyright 2002-2013 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -98,8 +98,8 @@ public abstract class ReflectionUtils {
} }
catch (IllegalAccessException ex) { catch (IllegalAccessException ex) {
handleReflectionException(ex); handleReflectionException(ex);
throw new IllegalStateException("Unexpected reflection exception - " + ex.getClass().getName() + ": " throw new IllegalStateException(
+ ex.getMessage()); "Unexpected reflection exception - " + ex.getClass().getName() + ": " + ex.getMessage());
} }
} }
@ -153,8 +153,8 @@ public abstract class ReflectionUtils {
while (searchType != null) { while (searchType != null) {
Method[] methods = (searchType.isInterface() ? searchType.getMethods() : searchType.getDeclaredMethods()); Method[] methods = (searchType.isInterface() ? searchType.getMethods() : searchType.getDeclaredMethods());
for (Method method : methods) { for (Method method : methods) {
if (name.equals(method.getName()) if (name.equals(method.getName()) &&
&& (paramTypes == null || Arrays.equals(paramTypes, method.getParameterTypes()))) { (paramTypes == null || Arrays.equals(paramTypes, method.getParameterTypes()))) {
return method; return method;
} }
} }