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?

Our team will help you with your specific setup - in German or English, by people who run the platform themselves.

War dieses Tutorial hilfreich?

Your answer is stored anonymously and helps us improve our tutorials.

Kommentare

No comments yet - be the first to ask a question about this tutorial.

Sign in to comment

Comments are open to centron customers. Sign in to your account to ask a question about this tutorial.

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