Tutorials  /  Databases

Spring @Value Annotation: Leitfaden und Beispiele

Ccentron Redaktion · Februar 2024 ·4 Min. Lesezeit ·Databases, Tutorial

Die Spring @Value-Annotation wird verwendet, um Standardwerte für Variablen und Methodenargumente zuzuweisen. Wir können mit der @Value-Annotation sowohl Spring-Umgebungsvariablen als auch Systemvariablen lesen. Die Spring @Value-Annotation unterstützt auch SpEL (Spring Expression Language). Lassen Sie uns einige Beispiele für die Verwendung der @Value-Annotation betrachten.

Standardwert

Wir können einem Klassenattribut einen Standardwert zuweisen, indem wir die @Value-Annotation verwenden.

Code
@Value("Standard-DB-Konfiguration")
    private String defaultName;
    Das Argument der @Value-Annotation kann nur ein String sein, aber Spring versucht, es in den angegebenen Typ zu konvertieren. Der folgende Code funktioniert einwandfrei und weist den Variablen die booleschen und ganzzahligen Werte zu.
    
    @Value("true")
    private boolean defaultBoolean;
    
    @Value("10")
    private int defaultInt;
DB

Passende Infrastruktur bei centron

Datenbanken im Betrieb wollen gepflegt werden: centron übernimmt auf Wunsch Updates, Backups und Monitoring – von der einzelnen Instanz bis zum Cluster. Managed Cluster ansehen →

Spring-Umgebungseigenschaft

Code
@Value("${APP_NAME_NOT_FOUND}")
    private String defaultAppName;

Wenn der Schlüssel in den Spring-Umgebungseigenschaften nicht gefunden wird, dann wird der Eigenschaftswert ${APP_NAME_NOT_FOUND} sein. Wir können einen Standardwert zuweisen, der vergeben wird, wenn der Schlüssel in den Spring-Umgebungseigenschaften fehlt.

Code
@Value("${APP_NAME_NOT_FOUND:Standard}")
    private String defaultAppName;

Spring @Value - Systemumgebung

Wenn die Spring-Umgebung aufgefüllt wird, liest sie alle Systemumgebungsvariablen und speichert sie als Eigenschaften. So können wir auch Systemvariablen mit der @Value-Annotation zuweisen.

Code
@Value("${java.home}")
    private String javaHome;
    
    @Value("${HOME}")
    private String homeDir;

Spring @Value - SpEL

Wir können auch die Spring Expression Language mit der @Value-Annotation verwenden. So können wir auch die Java-Home-Systemeigenschaft mit SpEL lesen.

Code
@Value("#{systemProperties['java.home']}")
    private String javaHome;

Spring @Value mit Methoden

Wenn die @Value-Annotation an einer Methode gefunden wird, wird Spring diese aufrufen, wenn alle Spring-Konfigurationen und Beans geladen werden. Wenn die Methode mehrere Argumente hat, wird jeder Argumentwert aus der Methodenannotation abgebildet. Wenn wir verschiedene Werte für verschiedene Argumente möchten, können wir die @Value-Annotation direkt mit dem Argument verwenden.

Code
@Value("Test")
    public void printValues(String s, String v){} //beide 's' und 'v' Werte werden 'Test' sein
    @Value("Test")
    public void printValues(String s, @Value("Eine andere Variable") String v){}
    // s=Test, v=Eine andere Variable

Beispiel

Lassen Sie uns eine einfache Spring-Anwendung erstellen, in der wir die @Value-Annotation verwenden, um Eigenschaften zu lesen und sie Klassenvariablen zuzuweisen. Erstellen Sie ein Maven-Projekt und fügen Sie Spring-Core-Abhängigkeiten hinzu.

Code
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.0.6.RELEASE</version>
    </dependency>

Unsere endgültige Projektstruktur wird wie das untenstehende Bild aussehen, wir werden uns die einzelnen Komponenten nacheinander ansehen.

Spring value annotation

Erstellen Sie eine Komponentenklasse, in der wir Variablenwerte durch die @Value-Annotation injizieren.

Go
package com.journaldev.spring;
    
    import org.springframework.beans.factory.annotation.Value;
    
    public class DBConnection {
    
    @Value("${DB_DRIVER_CLASS}")
    private String driverClass;
    @Value("${DB_URL}")
    private String dbURL;
    @Value("${DB_USERNAME}")
    private String userName;
    @Value("${DB_PASSWORD}")
    private char[] password;
    
    public DBConnection() {
    }
    
    public void printDBConfigs() {
    System.out.println("Treiberklasse = " + driverClass);
    System.out.println("DB-URL = " + dbURL);
    System.out.println("Benutzername = " + userName);
    
    // Machen Sie das niemals in einer Produktionsumgebung :D
    System.out.println("Passwort = " + String.valueOf(password));
    }
    }

Jetzt müssen wir eine Konfigurationsklasse erstellen und eine @Bean-Methode für die DBConnection-Klasse bereitstellen.

Go
package com.journaldev.spring;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.PropertySource;
    
    @Configuration
    @PropertySource("classpath:db.properties")
    @PropertySource(value = "classpath:root.properties", ignoreResourceNotFound = true)
    public class DBConfiguration {
    
    @Value("Standard-DB-Konfiguration")
    private String defaultName;
    
    @Value("true")
    private boolean defaultBoolean;
    
    @Value("10")
    private int defaultInt;
    
    @Value("${APP_NAME_NOT_FOUND:Standard}")
    private String defaultAppName;
    
    @Value("${java.home}")
    private String javaHome;
    
    @Value("${HOME}")
    private String homeDir;
    
    @Bean
    public DBConnection getDBConnection() {
        DBConnection dbConnection = new DBConnection();
        return dbConnection;
    }
    
    @Value("Test")
    public void printValues(String s, @Value("eine andere Variable") String v) {
        System.out.println("Eingabeargument 1 = " + s);
        System.out.println("Eingabeargument 2 = " + v);
        
        System.out.println("Heimverzeichnis = " + homeDir);
        System.out.println("Standardkonfigurationsname = " + defaultName);
        System.out.println("Standard-App-Name = " + defaultAppName);
        System.out.println("Java-Heimverzeichnis = " + javaHome);
        System.out.println("Boolean = " + defaultBoolean);
        System.out.println("Int = " + defaultInt);
    }

Hier ist unsere Hauptklasse, in der wir einen auf Annotationen basierenden Spring-Kontext erstellen.

Go
package com.journaldev.spring;
    
    import java.sql.SQLException;
    
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    public class SpringMainClass {
    
        public static void main(String[] args) throws SQLException {
            AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
            context.scan("com.journaldev.spring");
            context.refresh();
            System.out.println("Erfrischung des Spring-Kontexts");
            DBConnection dbConnection = context.getBean(DBConnection.class);
            
            dbConnection.printDBConfigs();
            
            // Schließen des Spring-Kontexts
            context.close();
        }
    }

Wenn Sie die Klasse ausführen, wird die folgende Ausgabe erzeugt.

Code
Eingabeargument 1 = Test
Eingabeargument 2 = eine andere Variable
Heimverzeichnis = /Users/pankaj
Standardkonfigurationsname = Standard-DB-Konfiguration
Standard-App-Name = Standard
Java-Heimverzeichnis = /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home
Boolean = wahr
Int = 10
Erfrischung des Spring-Kontexts
Treiberklasse = com.mysql.jdbc.Driver
DB-URL = jdbc:mysql://localhost:3306/Test
Benutzername = journaldev
Passwort = journaldev

Beachten Sie, dass die printValues()-Methode der Konfigurationsklasse aufgerufen wird, bevor unser Kontext bereit ist, Benutzeranfragen zu bedienen. Das ist alles für das Beispiel der Spring @Value-Annotation, Sie können den Beispielcode von unserem GitHub-Repository herunterladen.

Jetzt 200 € Guthaben sichern

Testen Sie Ihr Setup auf ccloud³

Registrieren Sie sich in der ccloud³ und erhalten Sie 200 € Startguthaben für Ihr Projekt – z. B. für eine PostgreSQL-VM mit automatischen Backups.

centron Redaktion Technische Redaktion

Das Redaktionsteam von centron schreibt Anleitungen aus dem Betriebsalltag: getestet auf unserer eigenen Plattform, betrieben im Rechenzentrum in Hallstadt bei Bamberg.

Kategorie Databases
Teilen
Noch offene Fragen?

Unser Team hilft Ihnen bei Ihrem konkreten Setup weiter – von Menschen, die die Plattform selbst betreiben.

War dieses Tutorial hilfreich?

Ihre Antwort wird anonym gespeichert und hilft uns, die Tutorials zu verbessern.

Kommentare

Noch keine Kommentare – stellen Sie die erste Frage zu diesem Tutorial.

Zum Kommentieren anmelden

Kommentare stehen centron-Kunden offen. Melden Sie sich in Ihrem Konto an, um eine Frage zu diesem Tutorial zu stellen.

Weiterlesen

Das könnte Sie auch interessieren

Jetzt kostenlos anfangen

Melden Sie sich an und erhalten Sie in den ersten 60 Tagen ein Guthaben von 200 € bei centron.

Dieses Werbeangebot gilt nur für neue Konten. Angebot ausschließlich für Gewerbetreibende.

Jetzt loslegen Sales kontaktieren