Cheat Sheet
Injecting a Managed Bean
@Inject private IceCreamService iceCream;
Disambiguating Injection Points for Managed Beans
@Inject @Chocolate private IceCreamService iceCream;
Selecting Beans at Run-Time
@Inject @Any private Instance<IceCreamService> anyIceCream; public void printFlavours() { for (IceCreamService iceCream : anyIceCream) { System.out.println(iceCream.getFlavour()); } }
Injecting an OSGi Service
@Inject @OsgiService private IceCreamService iceCream;
Disambiguating OSGi Services
@Inject @OsgiService(filter = "(&(flavour=chocolate)(lactose=false))") private IceCreamService iceCream;
Selecting OSGi Services at Run-Time
@Inject @OsgiService(dynamic = true) private Instance<IceCreamService> iceCreamServices;
A filter
member may be added to the @OsgiService
annotation to narrow down the set of matching OSGi services.
Instance<T>
implements Iterable<T>
, so to iterate over all matching services, simply write:
for (IceCreamService iceCreamService : iceCreamServices) { // ... }
Publishing a Bean as OSGi Service with singleton scope
@OsgiServiceProvider public class ChocolateService implements IceCreamService { }
By default, the service bean has CDI scope @SingletonScoped
and the corresponding OSGi service is published with singleton scope. The @SingletonScoped
annotation is optional.
Publishing a Bean as OSGi Service with bundle scope
Since Pax CDI 0.9.0
@OsgiServiceProvider @BundleScoped public class ChocolateService implements IceCreamService { }
Publishing a Bean as OSGi Service with prototype scope
Since Pax CDI 0.9.0
@OsgiServiceProvider @PrototypeScoped public class ChocolateService implements IceCreamService { }
Prototype scope is only supported when running on OSGi 6.0 or higher.
Setting OSGi Service Properties
@OsgiServiceProvider @Properties({ @Property(name = "flavour", value = "chocolate"), @Property(name = "lactose", value = "false") }) public class ChocolateService implements IceCreamService { }
Publishing an OSGi Service with Explicit Interfaces
@OsgiServiceProvider(classes = {ChocolateService.class, IceCreamService.class}) public class ChocolateService implements IceCreamService { }