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 {
}
, multiple selections available,