Spring Property Injection Concepts: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 19: Line 19:
=Injecting Properties into Beans=
=Injecting Properties into Beans=


A common pattern used to handle injected configuration is to declare a '''property holder class''', whose sole purpose in the application is to be holder of configuration data. Such class bundles several configuration properties together, under a common property namespace. One benefit of this approach is that it keeps configuration-specific details out of controllers and other application specific classes. Another benefit is that it makes it easy to share common configuration properties among several beans that may need this information.
A common pattern used to handle injected configuration is to declare a '''configuration property holder class''', whose sole purpose in the application is to be holder of configuration data. Such class bundles several configuration properties together, under a common property namespace. There is nothing special about configuration property holders. They are ordinary Spring components that have their properties injected from the [[#Spring_Environment|Spring environment]]. One benefit of this approach is that it keeps configuration-specific details out of controllers and other application specific classes. Another benefit is that it makes it easy to share common configuration properties among several beans that may need this information.


<syntaxhighlight lang='java'>
<syntaxhighlight lang='java'>

Revision as of 21:11, 21 November 2018

Internal

Overview

Spring has two different, but related kinds of configurations: bean wiring, which refers to declaring application components and their dependencies, and how those dependencies should be injected into each other, as described in the Dependency Injection and Inversion of Control Container section, and property injection, which is the process that allows external pieces of data, known as configuration properties, to be provided to the application runtime at startup or while it is running, in form of Java system properties, environment variables and by other means. This section addresses property injection concepts.

Configuration Properties

Configuration properties are pieces of data coded into Spring components using the JavaBeans property conventions. They usually have a corresponding member variable, a getter and a setter. The Spring Framework provides conventions and mechanisms to automatically inject values into configuration properties, while those values come from several different property sources.

The Environment Abstraction

The Spring environment is the only source of configuration properties for components needing them. The environment abstracts the origins of properties and applies precedence rules when the same property is specified in more than one source. It pulls property values from several sources: Java system properties, command-line arguments, environment variables, configuration files, etc. The property sources are described in detail in their corresponding sections, below.

TODO: Environment can be injected and inspected.

Injecting Properties into Beans

A common pattern used to handle injected configuration is to declare a configuration property holder class, whose sole purpose in the application is to be holder of configuration data. Such class bundles several configuration properties together, under a common property namespace. There is nothing special about configuration property holders. They are ordinary Spring components that have their properties injected from the Spring environment. One benefit of this approach is that it keeps configuration-specific details out of controllers and other application specific classes. Another benefit is that it makes it easy to share common configuration properties among several beans that may need this information.

Conventionally, hardcoded defaults are specified as initialization values for the member variables.


Individual properties can also be injected directly into established components, by .... However, if you have the option, bundling configuration properties into a ... as described above, is probably a better approach.

Property Injection and Auto-Configuration

The beans that are automatically configured by the Spring Boot autoconfiguration. process are all configurable by properties drawn from the Spring environment.

Property Sources

Java System Properties

Command-Line Arguments

java -jar ... --<property.name>=<value>

Example:

java -jar ... --server.port=9999

Environment Variables

The naming style should accommodate restrictions placed on environment variable names by the operating system.

export SERVER_PORT=9999

Property Configuration Files

application.properties

application.properties

Configuration Service

The configuration service is also referred to as configuration server.

Precedence

Profiles

TODO