We need to remove the synchronization block on the static variable
"descriptors". Under the current implementation, any component created, the
current classloader (application wide) has to be synchronized with every other
component. This is not acceptable.
Since loading PropertyDescriptors is not required to be synchronous, it is
acceptable to have more than one constructor actually populate the static map in
a non-blocking manner.
Code changes would require simply removing the synchronization block in the
constructor. Also, the static WeakHashMap should probably be indexed not by
Class, but by ClassName. With all of the oddball Classloaders and byte weavers
developers are using, I wouldn't trust Class.hashCode().