Managing life cycle and DI with CDI
By default, JAX-RS resources are created for each request. While this might be useful in some cases, it would be far more efficient if they were singletons. That way, we wouldn't be creating new object instances (an expensive operation) for each request, and we wouldn't be generating excess garbage after the request is completed.
While we could create an Application
subclass that returns the resources via the getSingletons()
method, that would prevent the container from automatically discovering and registering resources and providers. Another reason to avoid that approach is that the getSingletons()
method is deprecated in a future version of JAX-RS and will eventually be removed.
Instead, we can use Context and Dependency Injection (CDI). CDI uses annotations to allow developers to declaratively manage object life cycles and perform injections of fields, constructors, and setter methods.
Scopes
CDI has several built-in scopes...