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_TYPE
Type.hashCode() is very expensive as it traverses full descriptor to calculate hash code. |
static org.springframework.cglib.core.Customizer |
OBJECT_BY_CLASS
Deprecated.
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)