Spring @Value Annotation

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.

@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;

Spring-Umgebungseigenschaft

@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.

@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.

@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.

@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.

@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.

<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.

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


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 😀
    System.out.println("Passwort = " + String.valueOf(password));
    }
    }


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

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.

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.


        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.

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren: