Anotación @Value de Spring

La anotación @Value de Spring se utiliza para asignar valores predeterminados a las variables y a los argumentos de los métodos. Podemos leer las variables de entorno de Spring, así como las variables del sistema, mediante la anotación @Value . La anotación @Value de Spring también es compatible con SpEL. Veamos algunos ejemplos de uso de la anotación @Value .

Spring @Value – Valor predeterminado

Podemos asignar un valor predeterminado a una propiedad de clase usando la anotación @Value .

@Value("Default DBConfiguration")private String defaultName;

El argumento de anotación @Value solo puede ser una cadena, pero Spring intenta convertirla al tipo especificado. El código siguiente funcionará bien y asignará los valores booleanos y enteros a la variable.

@Value("true")private boolean defaultBoolean;@Value("10")private int defaultInt;

Spring @Value – Propiedad del entorno Spring

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

Si la clave no se encuentra en las propiedades del entorno de Spring, el valor de la propiedad será ${APP_NAME_NOT_FOUND}. Podemos asignar un valor predeterminado que se asignará si la clave no se encuentra en las propiedades del entorno de Spring.

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

Spring @Value – Entorno del sistema

Cuando se completa el entorno de Spring, lee todas las variables del entorno del sistema y las almacena como propiedades. Por lo tanto, también podemos asignar variables del sistema mediante la anotación @Value .

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

Primavera @Value – SpEL

También podemos usar el lenguaje de expresión Spring con la anotación @Value . De esta forma, también podemos leer las propiedades del sistema de inicio de Java usando SpEL.

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

Spring @Value con métodos

Cuando se encuentra la anotación @Value en un método, el contexto de Spring la invocará cuando se carguen todas las configuraciones y los beans de Spring. Si el método tiene varios argumentos, entonces el valor de cada argumento se asigna desde la anotación del método. Si queremos valores diferentes para diferentes argumentos, podemos usar la anotación @Value directamente con el argumento.

@Value("Test")public void printValues(String s, String v){} //both 's' and 'v' values will be 'Test' 
@Value("Test")public void printValues(String s, @Value("Data") String v){}// s=Test, v=Data

Ejemplo de Spring @Value

Creemos una aplicación Spring sencilla en la que usaremos la anotación @Value para leer propiedades y asignarlas a variables de clase. Cree un proyecto Maven y agregue dependencias básicas de Spring.

dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.0.6.RELEASE/version/dependency

La estructura final de nuestro proyecto se verá como la que se muestra en la siguiente imagen. Analizaremos cada uno de los componentes uno por uno. Crearemos una clase de componente donde inyectaremos valores de variables mediante la anotación @Value .

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("Driver Class = " + driverClass);System.out.println("DB URL = " + dbURL);System.out.println("User Name = " + userName);// Never do below in production environment :DSystem.out.println("Password = " + String.valueOf(password));}}

Ahora tenemos que crear una clase de configuración y proporcionar un método @Bean para la clase DBConnection.

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("Default DBConfiguration")private String defaultName;@Value("true")private boolean defaultBoolean;@Value("10")private int defaultInt;@Value("${APP_NAME_NOT_FOUND:Default}")private String defaultAppName;// @Value("#{systemProperties['java.home']}")@Value("${java.home}")private String javaHome;@Value("${HOME}")private String homeDir;@Beanpublic DBConnection getDBConnection() {DBConnection dbConnection = new DBConnection();return dbConnection;}@Value("Test")public void printValues(String s, @Value("another variable") String v) {System.out.println("Input Argument 1 =" + s);System.out.println("Input Argument 2 =" + v);System.out.println("Home Directory = " + homeDir);System.out.println("Default Configuration Name = " + defaultName);System.out.println("Default App Name = " + defaultAppName);System.out.println("Java Home = " + javaHome);System.out.println("Boolean = " + defaultBoolean);System.out.println("Int = " + defaultInt);}}

Aquí está nuestra clase principal donde estamos creando un contexto de resorte basado en anotaciones.

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("Refreshing the spring context");DBConnection dbConnection = context.getBean(DBConnection.class);dbConnection.printDBConfigs();// close the spring contextcontext.close();}}

Cuando ejecute la clase, producirá el siguiente resultado.

Input Argument 1 =TestInput Argument 2 =another variableHome Directory = /Users/pankajDefault Configuration Name = Default DBConfigurationDefault App Name = DefaultJava Home = /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/HomeBoolean = trueInt = 10Refreshing the spring contextDriver Class = com.mysql.jdbc.DriverDB URL = jdbc:mysql://localhost:3306/TestUser Name = journaldevPassword = journaldev

printValues()Tenga en cuenta que se llama a la clase Configuration antes de que nuestro contexto esté listo para atender las solicitudes de los usuarios. Eso es todo por el ejemplo de anotación @Value de Spring . Puede descargar el código de ejemplo desde nuestro repositorio de GitHub.

Proyecto de anotación de Spring @Value

SUSCRÍBETE A NUESTRO BOLETÍN 
No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio