## Package org.hibernate.bytecode

This package defines the API for plugging in bytecode libraries for usage by Hibernate.

See:
Description

Interface Summary
BasicProxyFactory: A proxy factory for "basic proxy" generation
BytecodeProvider: Contract for providers of bytecode services to Hibernate.
ClassTransformer: A persistence provider provides an instance of this interface to the PersistenceUnitInfo.addTransformer method.
ProxyFactoryFactory: An interface for factories of `proxy factory` instances.
ReflectionOptimizer: Represents reflection optimization for a particular class.
ReflectionOptimizer.AccessOptimizer: Represents optimized entity property access.
ReflectionOptimizer.InstantiationOptimizer: Represents optimized entity instantiation.

Class Summary
AbstractClassTransformerImpl: Basic implementation of the `ClassTransformer` contract.
InstrumentedClassLoader: A specialized classloader which performs bytecode enhancement on class definitions as they are loaded into the classloader scope.

## Package org.hibernate.bytecode Description

This package defines the API for plugging in bytecode libraries for usage by Hibernate. Hibernate uses these bytecode libraries in three scenarios:

1. Reflection optimization - to speed up the performance of POJO entity and component conctruction and field/property access
2. Proxy generation - runtime building of proxies used for deferred loading of lazy entities
3. Field-level interception - build-time instrumentation of entity classes for the purpose of intercepting field-level access (read/write) for both lazy loading and dirty tracking.

Currently, both CGLIB and Javassist are supported out-of-the-box.

Note that for field-level interception, simply plugging in a new `BytecodeProvider` is not enough for Hibernate to be able to recognize new providers. You would additionally need to make appropriate code changes to the `org.hibernate.intercept.Helper` class. This is because the detection of these enhanced classes is needed in a static environment (i.e. outside the scope of any `SessionFactory`.

Note that in the current form the ability to specify a different bytecode provider is actually considered a global settings (global to the JVM).

Copyright © 2001-2010 Red Hat, Inc. All Rights Reserved.