GuicedEE CDI
Lightweight Jakarta CDI bridge for GuicedEE applications.
Core Concept
Maps CDI annotations (@Inject, @Named, @ApplicationScoped, @Qualifier) to their Guice equivalents, provides a BeanManager adapter backed by the Guice injector, and registers itself as the Jakarta CDIProvider — so CDI-annotated code runs seamlessly inside a Guice-managed container.
Required Flow
- Add
com.guicedee:cdidependency. - Annotate your classes with standard Jakarta CDI annotations:
@jakarta.enterprise.context.ApplicationScoped public class GreetingService { public String greet(String name) { return "Hello, " + name + "!"; } } - Inject anywhere via
@Inject:public class WelcomeResource { @jakarta.inject.Inject private GreetingService greeter; } - Configure
module-info.java:module my.app { requires com.guicedee.cdi; } - Bootstrap GuicedEE — CDI module loads automatically:
IGuiceContext.registerModuleForScanning.add("my.app"); IGuiceContext.instance().inject();
Annotation Mapping
| CDI Annotation | Guice Equivalent |
|---|---|
| @jakarta.inject.Inject | @com.google.inject.Inject |
| @jakarta.inject.Named | Names.named() |
| @jakarta.inject.Singleton | Guice SINGLETON scope |
| @jakarta.enterprise.context.ApplicationScoped | Guice SINGLETON scope |
| @jakarta.inject.Qualifier | Guice binding annotation |
CDI Provider Chain
CDI.current()
→ JakartaCDIProvider.getCDI()
→ GuicedCDI.select(Class<T>)
→ IGuiceContext.get(Class<T>) // Guice injector lookup
BeanManager
The GuiceCDIBeanManager provides a simplified bean lookup API:
@Inject
private GuiceCDIBeanManager beanManager;
MyService svc = beanManager.getBean(MyService.class);
MyService svc = beanManager.getBean(MyService.class, "primary"); // @Named
boolean exists = beanManager.containsBean(MyService.class);
SPI Providers
| SPI | Purpose |
|---|---|
| BindScopeProvision | @Singleton, @ApplicationScoped → SINGLETON |
| InjectionPointProvision | @Inject, @Named, @PostConstruct detection |
| BindingAnnotationsProvision | @Qualifier as binding annotation |
| NamedAnnotationProvision | jakarta.inject.Named → Names.named() |
| InjectorAnnotationsProvision | jakarta.inject.Inject recognition |
Non-Negotiable Constraints
- Module must
requires com.guicedee.cdi;. - The CDI module is loaded automatically — no
providesneeded in your application module. - Injection packages must
openstocom.google.guice.