Primavera – Frijol Heredero

Los argumentos del constructor, los valores de propiedad y la información específica del contenedor, como el método de inicialización, el nombre del método de fábrica estático, etc., se pueden encontrar en una definición de bean. Los datos de configuración de una definición padre se pasan a una definición de bean hijo. La definición secundaria tiene la capacidad de anular o agregar valores según sea necesario.

Aunque la definición de herencia de Spring Bean difiere de la herencia de clase de Java, la noción de herencia es la misma. Se puede usar una definición de bean principal como plantilla, y otros beans secundarios pueden heredar la configuración requerida de él. Cuando se utilizan metadatos de configuración basados ​​en XML, el atributo principal se usa para identificar una definición de bean secundario, con el bean principal como el valor de este atributo.

Anteriormente hemos visto uno de los beneficios de la herencia en Java: la reutilización. Es decir, si la clase base tiene algunos atributos, la clase secundaria heredará esas propiedades y sus valores. En la clase Child, también podemos anular esos valores. Podemos heredar los atributos y valores del bean en Spring, y también podemos anularlos.

Implementación: Consideremos una clase arbitrariamente llamada Cliente, por lo que la estructura del proyecto es la siguiente: 

Paso 1: Creación de la clase ‘Cliente’ 

Archivo: Cliente.java

Java

// Java Program to Illustrate Customer Class
 
package com.geeksforgeeks.beans.inheritance;
 
// Class
public class Customer {
 
    // Class data members
    private String name;
    private String email;
    private String country;
 
    // Getters and setters
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
 
    public String getEmail() { return email; }
    public void setEmail(String email)
    {
        // this keyword refers to current instance itself
        this.email = email;
    }
 
    // Method
    public String getCountry() { return country; }
 
    // Setter
    public void setCountry(String country)
    {
        this.country = country;
    }
 
    // Method
    // To show message
    @Override public String toString()
    {
        // Print corresponding customer attributes
        return " Name:" + name + "\n Email:" + email
            + "\n Country:" + country;
    }
}

Paso 2: Cree un archivo spring beans.xml que demuestre cómo heredar el 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"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-3.2.xsd">
 
    <bean id="baseCustomer" abstract="true">
    <property name="country" value="India"/>
    </bean>
     
    <bean id="customer" parent="baseCustomer" class="com.geeksforgeeks.beans.inheritance.Customer">
    <property name="country" value="India"/>
    <property name="name" value="Admin"/>
    <property name="email" value="geeksforgeeks@gmail.com"/>
    </bean>
</beans>

Hemos definido 2 beans en el archivo de configuración.

  • Frijol con la base id.
  • El cliente es el bean padre, mientras que el segundo bean con el mismo id es el bean hijo. Como resultado, la propiedad del país y su valor son heredados por el cliente del frijol hijo, quien luego le agrega dos propiedades adicionales.

Paso 3: Cree una clase que cargue estos dos beans y muestre la salida con el valor heredado.

Java

// Java Program to Illustrate Bean Inheritance
 
package com.geeksforgeeks.beans.inheritance;
 
// Importing required classes
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
// Class
public class BeanInheritanceTest {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Inheriting Bean by customer
        ClassPathXmlApplicationContext applicationContext
            = new ClassPathXmlApplicationContext(
                "beans.xml");
 
        Customer customer
            = (Customer)applicationContext.getBean(
                "customer");
 
        // Printing the customer info
        System.out.println(customer.toString());
    }
}

Paso 4: Ejecute la clase anterior y vea el resultado

Solo el atributo Country del bean padre tiene valor. Aunque solo introdujimos dos atributos en Child, contiene valores para las tres propiedades. Como resultado, la propiedad Country se ha pasado efectivamente del bean Parent al bean Child.

Publicación traducida automáticamente

Artículo escrito por sanketnagare 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 *