Spring @Value Anotación con ejemplo

Una de las anotaciones más importantes de Spring es la anotación @Value, que se utiliza para asignar valores predeterminados a variables y argumentos de métodos. Podemos leer las variables de entorno de Spring, así como las variables del sistema usando la anotación @Value. También es compatible con Spring Expression Language (SpEL). Generalmente se usa para inyectar valores en las variables de configuración, que mostraremos y explicaremos en el siguiente ejemplo. 

Implementación: Proyecto

Requisitos previos

Paso 1: Primero, creemos una aplicación Spring simple e inyectemos los valores literales mediante inyección de setter. Por lo tanto, cree una clase simple Student que tenga tres atributos rollNo, name y age. Cree métodos setter para estos dos atributos y un método simple para imprimir los detalles del estudiante.

Archivo: Student.java

Java

// Java Program to Illustrate Student Class
 
// Class
public class Student {
 
    // Class data members
    private int rollNo;
    private String name;
    private int age;
 
    // Setter
    public void setRollNo(int rollNo)
    {
        // this keyword refers to current instance itself
        this.rollNo = rollNo;
    }
 
    // Setter
    public void setName(String name) { this.name = name; }
 
    // Setter
    public void setAge(int age) { this.age = age; }
 
    // Method
    public void display()
    {
        // Printing attributes of corresponding student
        System.out.println("Roll No: " + rollNo);
        System.out.println("Name: " + name);
        System.out.println("Age: " + age);
    }
}

Paso 2:  Vamos a crear un archivo de propiedades en su classpath y nombrarlo como student-info.properties (para este ejemplo lo llamamos así, puede nombrarlo según sus necesidades). Y en este archivo, vamos a escribir algo como lo siguiente: 

student.rollNo = 101
student.name = Sagar
student.age = 20

Paso 3: Ahora vamos a crear un Student Bean en el archivo beans.xml y dentro del bean, debe agregar el nombre de su propiedad y sus valores correspondientes dentro de la etiqueta <property>. Por ejemplo, para este proyecto, podemos escribir algo como esto

<context:property-placeholder location="classpath:student-info.properties"/>

<bean id="student" class="Student">
   <property name="rollNo" value="${student.rollNo}"/>
   <property name="name" value="${student.name}"/>
   <property name="age" value="${student.age}"/>
</bean>

Archivo: beans.xml

XML

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
 
    <context:property-placeholder location="classpath:student-info.properties"/>
     
    <bean id="student" class="Student">
        <property name="rollNo" value="${student.rollNo}"/>
        <property name="name" value="${student.name}"/>
        <property name="age" value="${student.age}"/>
    </bean>
 
</beans>

Paso 4: Ahora nuestro frijol está listo. Ahora vamos a crear una clase y definir el método main() dentro de esa clase. Supongamos que hemos creado una clase llamada Main y hemos definido el método main() dentro de esta clase. 

Archivo: Main.java

Java

// Java Program to Illustrate Application Class
 
// Importing require classes
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
// Application class
public class Main {
 
    // Main driver method
    public static void main(String[] args)
    {
        // Using ApplicationContext tom implement Spring IoC
        ApplicationContext context
            = new ClassPathXmlApplicationContext(
                "beans.xml");
 
        // Getting the bean student
        Student student
            = context.getBean("student", Student.class);
 
        // Calling display() method
        // inside main() method
        student.display();
    }
}

Paso 5: Ahora ejecuta tu método main() y el resultado será así.

Producción:

Roll No: 101
Name: Sagar
Age: 20

Explicación del código: Entonces la aplicación funciona bien. Ahora vuelve al archivo beans.xml . Y en este archivo, no queremos establecer un valor como este como lo hemos hecho. Queremos usar alguna anotación para hacer lo mismo. Y aquí entra en escena @Value Annotation. Entonces podemos modificar nuestro archivo Student.java algo como esto

Archivo: Student.java

Java

// Java Program to Illustrate Student Class
 
// Importing required classes
import org.springframework.beans.factory.annotation.Value;
 
// Class
public class Student {
 
    // Class data members
    private int rollNo;
    private String name;
    private int age;
 
    @Value("101")
    // Setter
    public void setRollNo(int rollNo)
    {
        this.rollNo = rollNo;
    }
 
    @Value("Anshul")
    // Setter
    public void setName(String name)
    {
        this.name = name;
    }
 
    @Value("25")
    // Setter
    public void setAge(int age)
    {
        this.age = age;
    }
 
    // Method
    public void display()
    {
        // Print statement
        System.out.println("Roll No: " + rollNo);
        System.out.println("Name: " + name);
        System.out.println("Age: " + age);
    }
}

Paso 6: agregue la siguiente línea dentro de su archivo beans.xml

<context:annotation-config/>

Archivo: beans.xml

XML

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
 
    <context:annotation-config/>
 
    <bean id="student" class="Student">
 
    </bean>
   
</beans>

Paso 7: Ejecute su método main() y el resultado será así.

Producción:

Roll No: 101
Name: Anshul
Age: 25

Nota: O también puede establecer los valores dinámicamente desde el archivo de propiedades. Podemos modificar nuestro archivo Student.java algo como esto

Archivo: Student.java

Java

// Java Program to Illustrate Student Class
 
// Importing required classes
import org.springframework.beans.factory.annotation.Value;
 
// Class
public class Student {
 
    // Class data members
    private int rollNo;
    private String name;
    private int age;
 
    @Value("${student.rollNo}")
    // Setter
    public void setRollNo(int rollNo)
    {
 
        // this keyword refers to current instance itself
        this.rollNo = rollNo;
    }
 
    @Value("${student.name}")
    // Setter
    public void setName(String name)
    {
        this.name = name;
    }
 
    @Value("${student.age}")
    // Setter
    public void setAge(int age)
    {
        this.age = age;
    }
 
    // Method
    public void display()
    {
        // Printing attributes corresponding to student
        System.out.println("Roll No: " + rollNo);
        System.out.println("Name: " + name);
        System.out.println("Age: " + age);
    }
}

Sugerencia: no olvide agregar la siguiente línea dentro de su archivo beans.xml

<context:property-placeholder location="classpath:student-info.properties"/>

Archivo: beans.xml 

XML

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
 
    <context:annotation-config/>
      <context:property-placeholder location="classpath:student-info.properties"/>
 
    <bean id="student" class="Student">
 
    </bean>
   
</beans>

Ejecute su método main() y el resultado será así.

Producción:

Roll No: 101
Name: Sagar
Age: 20

Ahora analicemos un concepto más interesante en la anotación Spring @Value. También podemos usar la anotación @Value antes de los campos. No es necesario crear el método setter. Podemos modificar nuestro archivo Student.java algo como esto

Archivo: Student.java

Java

// Java Program to Illustrate Student Class
 
// Importing required classes
import org.springframework.beans.factory.annotation.Value;
 
// Class
public class Student {
 
    // Class data members
    @Value("${student.rollNo}") private int rollNo;
    @Value("${student.name}") private String name;
    @Value("${student.age}") private int age;
 
    // Method
    public void display()
    {
        // Printing attributes corresponding to student
        System.out.println("Roll No: " + rollNo);
        System.out.println("Name: " + name);
        System.out.println("Age: " + age);
    }
}

Todas las demás cosas deben permanecer sin cambios. Ejecute su método main() nuevamente y el resultado será así.

Producción:

Roll No: 101
Name: Sagar
Age: 20

Publicación traducida automáticamente

Artículo escrito por AmiyaRanjanRout y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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