Package org.springframework.cglib.core
Class KeyFactory
java.lang.Object
org.springframework.cglib.core.KeyFactory
Generates classes to handle multi-valued keys, for use in things such as Maps and Sets.
Code for
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.
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final org.springframework.cglib.core.Customizerstatic final org.springframework.cglib.core.HashCodeCustomizerType.hashCode()is very expensive as it traverses full descriptor to calculate hash code.static final org.springframework.cglib.core.CustomizerDeprecated.this customizer might result in unexpected class leak since key object still holds a strong reference to the Object and class.static final org.springframework.cglib.core.FieldTypeCustomizer -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic KeyFactorystatic KeyFactorycreate(ClassLoader loader, Class keyInterface, org.springframework.cglib.core.Customizer customizer) static KeyFactorycreate(ClassLoader loader, Class keyInterface, org.springframework.cglib.core.KeyFactoryCustomizer customizer, List<org.springframework.cglib.core.KeyFactoryCustomizer> next) static KeyFactorystatic KeyFactorycreate(Class keyInterface, org.springframework.cglib.core.KeyFactoryCustomizer first, List<org.springframework.cglib.core.KeyFactoryCustomizer> next)
-
Field Details
-
CLASS_BY_NAME
public static final org.springframework.cglib.core.Customizer CLASS_BY_NAME -
STORE_CLASS_AS_STRING
public static final org.springframework.cglib.core.FieldTypeCustomizer STORE_CLASS_AS_STRING -
HASH_ASM_TYPE
public static final org.springframework.cglib.core.HashCodeCustomizer HASH_ASM_TYPEType.hashCode()is very expensive as it traverses full descriptor to calculate hash code. This customizer usesType.getSort()as a hash code. -
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
-
-
Constructor Details
-
KeyFactory
protected KeyFactory()
-
-
Method Details
-
create
-
create
public static KeyFactory create(Class keyInterface, org.springframework.cglib.core.Customizer customizer) -
create
public static KeyFactory create(Class keyInterface, org.springframework.cglib.core.KeyFactoryCustomizer first, List<org.springframework.cglib.core.KeyFactoryCustomizer> next) -
create
public static KeyFactory create(ClassLoader loader, Class keyInterface, org.springframework.cglib.core.Customizer customizer) -
create
public static KeyFactory create(ClassLoader loader, Class keyInterface, org.springframework.cglib.core.KeyFactoryCustomizer customizer, List<org.springframework.cglib.core.KeyFactoryCustomizer> next)
-