public class Context extends Object implements Disposable, AutoCloseable
Service
Modifier and Type | Field and Description |
---|---|
static String |
STRICT_PROPERTY
System property indicating whether the context should fail fast when
attempting to instantiate a required service which is invalid or missing.
|
Constructor and Description |
---|
Context()
Creates a new SciJava application context with all available services.
|
Context(boolean empty)
Creates a new SciJava application context.
|
Context(boolean noServices,
boolean noPlugins)
Creates a new SciJava application context.
|
Context(Class... serviceClasses)
Creates a new SciJava application context with the specified services (and
any required service dependencies).
|
Context(Collection<Class<? extends Service>> serviceClasses)
Creates a new SciJava application context with the specified services (and
any required service dependencies).
|
Context(Collection<Class<? extends Service>> serviceClasses,
boolean strict)
Creates a new SciJava application context with the specified services (and
any required service dependencies).
|
Context(Collection<Class<? extends Service>> serviceClasses,
PluginIndex pluginIndex)
Creates a new SciJava application context with the specified services (and
any required service dependencies).
|
Context(Collection<Class<? extends Service>> serviceClasses,
PluginIndex pluginIndex,
boolean strict)
Creates a new SciJava application context with the specified services (and
any required service dependencies).
|
Context(PluginIndex pluginIndex)
Creates a new SciJava application context with all available services from
the specified PluginIndex.
|
Modifier and Type | Method and Description |
---|---|
void |
close() |
void |
dispose()
Performs any needed cleanup of the object's services, in preparation for
the object being retired (e.g., to make garbage collection possible).
|
static ClassLoader |
getClassLoader()
Gets the class loader to use.
|
PluginIndex |
getPluginIndex() |
<S extends Service> |
getService(Class<S> c)
Gets the service of the given class, or null if there is no matching
service.
|
Service |
getService(String className)
Gets the service of the given class name (useful for scripts).
|
ServiceIndex |
getServiceIndex() |
void |
inject(Object o)
Injects the application context into the given object.
|
boolean |
isInjectable(Class<?> type)
Reports whether a parameter of the given type would be assigned a value as
a consequence of calling
inject(Object) . |
boolean |
isStrict() |
<S extends Service> |
service(Class<S> c)
Gets the service of the given class.
|
Service |
service(String className)
Gets the service of the given class name (useful for scripts).
|
static List<Class<? extends Service>> |
serviceClassList(Class... serviceClasses)
Utility method for converting a varargs list of service classes to a
List of those classes. |
void |
setStrict(boolean strict) |
public static final String STRICT_PROPERTY
IllegalArgumentException
in that
situation.public Context()
public Context(boolean empty)
empty
- If true, the context will be empty of services; otherwise, it
will be initialized with all available services.Context(boolean, boolean)
public Context(boolean noServices, boolean noPlugins)
noServices
- If true, the context will contain no services; otherwise,
it will be initialized with all available services.noPlugins
- If true, the context will contain no plugins; otherwise,
it will be initialized with all available plugins.Context(Collection, PluginIndex, boolean)
public Context(Class... serviceClasses)
Developer's note: This constructor's argument is raw (i.e.,
Class...
instead of Class<? extends Service>...
) because
otherwise, downstream invocations (e.g.,
new Context(DisplayService.class)
) yield the potentially confusing
warning:
Type safety: A generic array of
Class<? extends Service>
is created for a varargs
parameter
To avoid this, we have opted to use raw types and suppress the relevant warnings here instead.
serviceClasses
- A list of types that implement the Service
interface (e.g., DisplayService.class
). Compatible
services will be loaded in the order given, regardless of
their relative priorities.ClassCastException
- If any of the given arguments do not implement
the Service
interface.Context(Collection, PluginIndex, boolean)
public Context(Collection<Class<? extends Service>> serviceClasses)
serviceClasses
- A collection of types that implement the
Service
interface (e.g., DisplayService.class
).
Compatible services will be loaded according to the order of the
collection, regardless of their relative priorities.Context(Collection, PluginIndex, boolean)
public Context(Collection<Class<? extends Service>> serviceClasses, boolean strict)
serviceClasses
- A collection of types that implement the
Service
interface (e.g., DisplayService.class
).
Compatible services will be loaded according to the order of the
collection, regardless of their relative priorities.strict
- Whether context creation will fail fast when there is an
error instantiating a required service.Context(Collection, PluginIndex, boolean)
public Context(PluginIndex pluginIndex)
PluginIndex
's PluginFinder
are desired.pluginIndex
- The plugin index to use when discovering and indexing
plugins. If you wish to completely control how services are
discovered (i.e., use your own
PluginFinder
implementation), then you
can pass a custom PluginIndex
here. Passing null will
result in a default plugin index being constructed and used.Context(Collection, PluginIndex, boolean)
public Context(Collection<Class<? extends Service>> serviceClasses, PluginIndex pluginIndex)
PluginIndex
's
associated PluginFinder
.serviceClasses
- A collection of types that implement the
Service
interface (e.g., DisplayService.class
).
Compatible services will be loaded according to the order of the
collection, regardless of their relative priorities.pluginIndex
- The plugin index to use when discovering and indexing
plugins. If you wish to completely control how services are
discovered (i.e., use your own
PluginFinder
implementation), then you
can pass a custom PluginIndex
here. Passing null will
result in a default plugin index being constructed and used.Context(Collection, PluginIndex, boolean)
public Context(Collection<Class<? extends Service>> serviceClasses, PluginIndex pluginIndex, boolean strict)
PluginIndex
's
associated PluginFinder
.
NB: Context creation is an important step of a SciJava application's
lifecycle. Particularly in environments where more than one implementation
exists for various services, careful consideration should be exercised
regarding what classes and plugins are provided to the Context, and what
needs to occur during the initialization of these services (especially
those of lower priority). See ServiceHelper.loadServices()
for more
information.
NB: Instiantiation of a Context has an implied requirement of a
corresponding call to dispose()
at the end of the SciJava
applicaton's lifecycle. This cleans up any remaining resources and allows
the JVM to exit gracefully. This is called automatically when constructed as
an AutoCloseable
.
serviceClasses
- A collection of types that implement the
Service
interface (e.g., DisplayService.class
).
Compatible services will be loaded according to the order of the
collection, regardless of their relative priorities.pluginIndex
- The plugin index to use when discovering and indexing
plugins. If you wish to completely control how services are
discovered (i.e., use your own
PluginFinder
implementation), then you
can pass a custom PluginIndex
here. Passing null will
result in a default plugin index being constructed and used.strict
- Whether context creation will fail fast when there is an
error instantiating a required service.public ServiceIndex getServiceIndex()
public PluginIndex getPluginIndex()
public boolean isStrict()
public void setStrict(boolean strict)
public <S extends Service> S service(Class<S> c)
NoSuchServiceException
- if the context does not have the requested
service.public Service service(String className)
IllegalArgumentException
- if the class does not exist, or is not a
service class.NoSuchServiceException
- if the context does not have the requested
service.public <S extends Service> S getService(Class<S> c)
public Service getService(String className)
public void inject(Object o)
Context
fields annotated
with @Parameter
, sets the value of those fields to this context.
Service
fields annotated
with @Parameter
, sets the value of those fields to the
corresponding service available from this context.EventService.subscribe(Object)
with the object to
register any @EventHandler
annotated methods as event subscribers.
o
- The object to which the context should be assigned.IllegalStateException
- If the object already has a context.IllegalArgumentException
- If the object has a required
Service
parameter (see Parameter.required()
)
which is not available from this context.public boolean isInjectable(Class<?> type)
inject(Object)
.
This method is notably useful for downstream code to discern between
Parameter
fields whose values would be injected, versus those whose
values would not, without needing to hardcode type comparison checks
against the Service
and Context
types.
type
- The type of the @Parameter
-annotated field.public void dispose()
Disposable
dispose
in interface Disposable
public void close() throws Exception
close
in interface AutoCloseable
Exception
public static List<Class<? extends Service>> serviceClassList(Class... serviceClasses)
List
of those classes.public static ClassLoader getClassLoader()
Copyright © 2015–2022 SciJava. All rights reserved.