| CARVIEW |
|
jen
|
| Summary | Jen is a high-level Class transformation and generation library |
|---|---|
| Categories | None |
| License | Apache License, Version 2.0 |
| Owner(s) | roscopeco |
Description
Jen is a high-level
Java™ classworking toolkit that harnesses the power and performance
of ASM in a convenient, easy to work
with package. Jen makes classworking almost as simple as Collections, and is
designed to provide all the flexibility of libraries like
Cglib, while it's powerful
SoftClass core, convenient support for common requirements right
'out of the box', high performance and full support for recent Java features
such as generics and annotations make Jen an ideal solution for any kind of
generation, at compile, run, or any other time!
Jen combines the best ideas from contemporary classworking solutions, from Cglib to Javassist and BCEL, while incorporating a few new ideas, convenient wrapping, and many advanced configurations, strategies, and defaults right off the bat. Jen's layered API, carefully following the principle of least surprise with sensible defaults throughout, modular packaging and the lack of runtime dependencies between Jen and the classes it creates (even when working with proxies) all help make Jen as usable, and widely applicable, as possible.
Jen's main features include
Class-like core API - TheSoftClassclass is at the heart of Jen, and provides a mutable model of the Java class. A SoftClass instance can be created with a.classfile,java.lang.Classinstance, an ASMClassNode, or empty to start from scratch, and can directly output any of the first three at any time, with a single method call.- Runtime classworking support - Jen is ready for forthcoming developments in the next generation JVMs, and recognises the increasing shift toward metaprogramming techniques, thanks to extensive support for runtime generation and transformation built on top of the bytecode-based core.
- Works the way you do. Jen lets you get as close to, or stay as far away from,
the bare internals of the JVM as you like - as well as full-flexibility of working
with internal names and ASM
Types, Jen provides complete support for transparently converting language names andClasses to and from binary names andTypes on the fly. - Many common patterns supported out of the box - The optional Jen Members and Jen Tools libraries provides many generally-applicable class member implementations, and utilities to support common patterns in classworking, and programming in general. In many cases these features allow Class creation and transformation with Jen to be achieved without ever 'thinking in bytecode'.
- Tight integration with ASM - Jen is designed to wrap ASM, not smother it,
and in many areas ASM's advanced functionality is directly surfaced through the Jen implementation.
This allows sophisticated ASM utilities such as the
GeneratorAdapterto be used with great ease, making for an really easy time when you do need to generate a method to spec. With Jen (and ASM) you get total control, but never have to think in terms of target bytecode offsets and constant pool indices. - Full support for Java 5 features - Jen fully supports generation of classes targeted at any specification version up to and including J5 (and beyond), and includes designed in support for new features such as annotations, generics, and autoboxing.
- Unbelievable performance - Java bytecode generation has gained an reputation for being slow and heavy, but the combination of ASM and Jen finally lay that image to rest. Jen is carefully designed an implemented to follow ASM's lead when it comes to performant classworking, with the result that everything from parsing a class file to accessing member information to generating methods is almost certainly much faster than you'd expect.
Jen is a lightweight, low dependency library, relying only on the ASM core, attrs, tree and commons libraries. ASM itself is designed to be lightweight, however, and introduces no further dependencies beyond the platform, making for a small, fast library that can slot in almost anywhere.
More information
For more information, including comprehensive Javadoc and usage information,
please see the current release documentation, which can be found
here.
In addition, our
Wiki
space on Java.net has collaborative 'in-progress' documentation, and is often
the place to find information about new features that haven't made it out of
CVS yet.
For further general introductory and overview information, try the
FAQ
| Powered by CollabNet | Feedback |
FAQ |
Press |
Developer tools
© 1995 - 2007 CollabNet. CollabNet is a registered trademark of CollabNet, Inc. |
