:jbake-type: page
:jbake-status: published

= Apache Tamaya: SPI Support Module

toc::[]


[[SPISupport]]
== Tamaya SPI Support

Tamaya _SPI Support_ is a module only depending on the API. It implements lots of API and SPI related
artifacts in a portable way. Tamaya's core module completes this functionality to implement the
full Tamaya API. This module can be reused also with alternate implementations of the Tamaya API.


=== What functionality this module provide?

Tamaya _SPI Support_ provides several base classes that can be used to implement the Tamaya Configuration API:

* +BasePropertySource+ provides an abstract *base class* for implementation of your own `PropertySource`.
* +DefaultConfiguration+ provides you with a simple implementation of the +Configuration+ interface based on a
  +ConfigurationContext+ provided. This is also very useful for mocking configuration during test execution, but
  not only constraint to that use case.
* +DefaultConfigurationContext+ provides an implementation of the +ConfigurationContext+ API.
* +MapPropertySource+ implements a property source based on +java.util.Map+.
* +PriorityServiceComparator+ compares arbitrary services based on their +@Priority+ annotations (also handling the
  case, where no such annotation is present).
* +PropertiesResourcePropertySource+ is an implementation of a +PropertySource+ based on a +Properties+ instance,
  loadable from any +URL+.
+ +PropertyConverterManager+ is a useful service class, when implementing instances of +ConfigurationContext+.
  It manages registered instances of +PropertyConverter+ and provides easy to use type conversion logic based on
  the registered converters.
+ +PropertyFiltering+ provides a similar class, which manages +PropertyFilter+ instances and provides an
  easy to use high level filtering API.
+ +PropertySourceComparator+ provides an implementation that compares +PropertySources+ based on their +getOrdinal()+
  values and their class names. It is used to establish the default loading (significance) of property sources.
+ The default configuration implementation also allows to replace the raw value evaluation
  logic using a +ConfigValueEvaluator+, similar to Tamaya's core implementation.

NOTE: It is highly recommended that you also read the link:../core.html[documentation] of Tamaya's
      core implementation, since this describes the abstractions in use in more
      detail.

=== Compatibility

The module is based on Java 8, so it will run on Java 8 and beyond.


=== Installation

To use Tamaya's _spisupport_ you only have to add the corresponding dependency to your module:

[source, xml, subs=attributes+]
-----------------------------------------------
<dependency>
  <groupId>org.apache.tamaya</groupId>
  <artifactId>tamaya-spisupport</artifactId>
  <version>{tamaya_version}</version>
</dependency>
-----------------------------------------------

The component will not register any components but only provides portable base classes for some common SPI
implementation tasks. It only depends on the API, so it should be safely reusable also with other implementations
of the Tamaya API as well.
