Polishing
This commit is contained in:
parent
045f78e6c5
commit
6021822ce4
|
@ -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());
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue