Module that will add dynamic bytecode generation for standard Jackson POJO serializers and deserializers, eliminating majority of remaining data binding overhead.
Afterburner plugs in using standard Module
interface.
Module is considered stable and has been used in production environments since version 2.2. There is, however, a potential future replacement available (as of Jackson 2.12): Blackbird module. See the parent README for details.
To use module on Maven-based projects, use following dependency:
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-afterburner</artifactId>
<version>2.12.0</version>
</dependency>
(or whatever version is most up-to-date at the moment)
For non-Maven use cases, you download jars from Central Maven repository.
Module jar is also a functional OSGi bundle, with proper import/export declarations, so it can be use on OSGi container as is.
To use the the Module in Jackson, simply register it with the ObjectMapper instance:
ObjectMapper mapper = JsonMapper.builder()
.addModule(new AfterburnerModule())
.build();
after which you just do data-binding as usual:
Value val = mapper.readValue(jsonSource, Value.class);
mapper.writeValue(new File("result.json"), val);
Following things are optimized:
- For serialization (POJOs to JSON):
- Accessors for "getting" values (field access, calling getter method) are inlined using generated code instead of reflection
- Serializers for small number of 'primitive' types (
int
,long
, String) are replaced with direct calls, instead of getting delegated toJsonSerializer
s
- For deserialization (JSON to POJOs)
- Calls to default (no-argument) constructors are byte-generated instead of using reflection
- Mutators for "setting" values (field access, calling setter method) are inlined using generated code instead of reflection
- Deserializers for small number of 'primitive' types (
int
,long
, String) are replaced with direct calls, instead of getting delegated toJsonDeserializer
s
- Streaming parser/generator access (although it is possible that some optimizations may be added)
- Tree Model: there isn't much that can be done at this level
Check out Wiki.