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