public abstract class KeyFactory extends Object
equals and hashCode methods follow the
 the rules laid out in Effective Java by Joshua Bloch.
 
 To generate a KeyFactory, you need to supply an interface which
 describes the structure of the key. The interface should have a
 single method named newInstance, which returns an
 Object. The arguments array can be
 anything--Objects, primitive values, or single or
 multi-dimension arrays of either. For example:
 
     private interface IntStringKey {
         public Object newInstance(int i, String s);
     }
 
 Once you have made a KeyFactory, you generate a new key by calling
 the newInstance method defined by your interface.
 
     IntStringKey factory = (IntStringKey)KeyFactory.create(IntStringKey.class);
     Object key1 = factory.newInstance(4, "Hello");
     Object key2 = factory.newInstance(4, "World");
 
 Note:
 hashCode equality between two keys key1 and key2 is only guaranteed if
 key1.equals(key2) and the keys were produced by the same factory.
| Modifier and Type | Class and Description | 
|---|---|
| static class  | KeyFactory.Generator | 
| Modifier and Type | Field and Description | 
|---|---|
| static org.springframework.cglib.core.Customizer | CLASS_BY_NAME | 
| static org.springframework.cglib.core.HashCodeCustomizer | HASH_ASM_TYPEType.hashCode()is very expensive as it traverses full descriptor to calculate hash code. | 
| static org.springframework.cglib.core.Customizer | OBJECT_BY_CLASSDeprecated. 
 this customizer might result in unexpected class leak since key object still holds a strong reference to the Object and class.
 It is recommended to have pre-processing method that would strip Objects and represent Classes as Strings | 
| static org.springframework.cglib.core.FieldTypeCustomizer | STORE_CLASS_AS_STRING | 
| Modifier | Constructor and Description | 
|---|---|
| protected  | KeyFactory() | 
| Modifier and Type | Method and Description | 
|---|---|
| static KeyFactory | create(Class keyInterface) | 
| static KeyFactory | create(Class keyInterface,
      org.springframework.cglib.core.Customizer customizer) | 
| static KeyFactory | create(Class keyInterface,
      org.springframework.cglib.core.KeyFactoryCustomizer first,
      List<org.springframework.cglib.core.KeyFactoryCustomizer> next) | 
| static KeyFactory | create(ClassLoader loader,
      Class keyInterface,
      org.springframework.cglib.core.Customizer customizer) | 
| static KeyFactory | create(ClassLoader loader,
      Class keyInterface,
      org.springframework.cglib.core.KeyFactoryCustomizer customizer,
      List<org.springframework.cglib.core.KeyFactoryCustomizer> next) | 
public static final org.springframework.cglib.core.Customizer CLASS_BY_NAME
public static final org.springframework.cglib.core.FieldTypeCustomizer STORE_CLASS_AS_STRING
public static final org.springframework.cglib.core.HashCodeCustomizer HASH_ASM_TYPE
Type.hashCode() is very expensive as it traverses full descriptor to calculate hash code.
 This customizer uses Type.getSort() as a hash code.@Deprecated public static final org.springframework.cglib.core.Customizer OBJECT_BY_CLASS
public static KeyFactory create(Class keyInterface)
public static KeyFactory create(Class keyInterface, org.springframework.cglib.core.Customizer customizer)
public static KeyFactory create(Class keyInterface, org.springframework.cglib.core.KeyFactoryCustomizer first, List<org.springframework.cglib.core.KeyFactoryCustomizer> next)
public static KeyFactory create(ClassLoader loader, Class keyInterface, org.springframework.cglib.core.Customizer customizer)
public static KeyFactory create(ClassLoader loader, Class keyInterface, org.springframework.cglib.core.KeyFactoryCustomizer customizer, List<org.springframework.cglib.core.KeyFactoryCustomizer> next)