Save This Page
Home » spring-framework-2.5.5-with-dependencies » org.springframework » beans » [javadoc | source]
org.springframework.beans
public class: CachedIntrospectionResults [javadoc | source]
java.lang.Object
   org.springframework.beans.CachedIntrospectionResults
Internal class that caches JavaBeans java.beans.PropertyDescriptor information for a Java class. Not intended for direct use by application code.

Necessary for own caching of descriptors within the application's ClassLoader, rather than rely on the JDK's system-wide BeanInfo cache (in order to avoid leaks on ClassLoader shutdown).

Information is cached statically, so we don't need to create new objects of this class for every JavaBean we manipulate. Hence, this class implements the factory design pattern, using a private constructor and a static #forClass(Class) factory method to obtain instances.

Field Summary
static final  Set acceptedClassLoaders    Set of ClassLoaders that this CachedIntrospectionResults class will always accept classes from, even if the classes do not qualify as cache-safe. 
static final  Map classCache    Map keyed by class containing CachedIntrospectionResults. Needs to be a WeakHashMap with WeakReferences as values to allow for proper garbage collection in case of multiple class loaders. 
Method from org.springframework.beans.CachedIntrospectionResults Summary:
acceptClassLoader,   clearClassLoader,   forClass,   getBeanClass,   getBeanInfo,   getPropertyDescriptor
Methods from java.lang.Object:
equals,   getClass,   hashCode,   notify,   notifyAll,   toString,   wait,   wait,   wait
Method from org.springframework.beans.CachedIntrospectionResults Detail:
 public static  void acceptClassLoader(ClassLoader classLoader) 
    Accept the given ClassLoader as cache-safe, even if its classes would not qualify as cache-safe in this CachedIntrospectionResults class.

    This configuration method is only relevant in scenarios where the Spring classes reside in a 'common' ClassLoader (e.g. the system ClassLoader) whose lifecycle is not coupled to the application. In such a scenario, CachedIntrospectionResults would by default not cache any of the application's classes, since they would create a leak in the common ClassLoader.

    Any acceptClassLoader call at application startup should be paired with a #clearClassLoader call at application shutdown.

 public static  void clearClassLoader(ClassLoader classLoader) 
    Clear the introspection cache for the given ClassLoader, removing the introspection results for all classes underneath that ClassLoader, and deregistering the ClassLoader (and any of its children) from the acceptance list.
 static CachedIntrospectionResults forClass(Class beanClass) throws BeansException 
    Create CachedIntrospectionResults for the given bean class.

    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.

 Class getBeanClass() 
 BeanInfo getBeanInfo() 
 PropertyDescriptor getPropertyDescriptor(String propertyName)