JEDI is a type-based Dependency Injection framework for Java.
Some of its main features are:
Fully type-based, no need for annotations or named parameters
Programmatic configuration
Constructor injection
Autoboxing of primitive types
Automatically generated factories
Automatically generated collections
Automatic wrapping and propagation of checked exceptions
Able to handle cyclic dependencies using dynamic proxies
Generic factory methods
Implicit and type-based child containers
Separation of dependency resolution and instantiation
Complete and concise exception messages for debugging
JEDI is purely focused on Dependency Injection, so features such as Object Lifecycle Management are left to the application itself and external frameworks. In order to prevent mixing of bootstrap and application code, direct access to the DI container is both unnecessary and impossible.
Other requirements that drove the initial design of JEDI are that it should:
Require no changes to existing code (that uses manual injection)
Avoid unnecessary coupling, e.g. simply passing on (constructor) arguments