Tuesday, 14 August 2018

Spring bean configuration for inheritance [Override base bean value] | Spring Tutorial

🚀 Love learning Java and Spring?

Don't miss out on the latest tutorials! Join our community today.

SUBSCRIBE TO RAM N JAVA

Understanding Spring Bean Inheritance

In this tutorial, we explore how to use Bean Inheritance in the Spring Framework. This is a powerful feature that allows you to share common property values between different bean definitions, helping you keep your configuration files clean and maintainable.

1. The Problem: Repeating Configurations

Imagine you have multiple beans of the same class (like an Employee class) that share many common properties—for example, they all work for the same company or live in the same country. Instead of typing these values over and over for every single bean, you can define a base bean and let others inherit from it.

2. How Inheritance Works in Spring

In your Spring configuration file, you can specify a parent attribute for a bean. The "child" bean will then inherit the configuration data, including property values, from the parent bean.

  • Inherit Values: The child bean automatically gets the property values of the parent.
  • Override Values: If the child bean needs a different value for a specific property, it can simply "override" it by providing its own value.

3. Practical Example: The Employee Bean

In the video tutorial, we see an Employee class with ID, Name, and Country. We define a base bean that sets the country to "Japan."

  • Employee 1: Inherits from the base but overrides the country to "India."
  • Employee 2: Inherits from the base and keeps the default country "Japan."

Key Takeaways for Beginners

  • Use the parent attribute in your XML configuration to link beans.
  • Bean inheritance is purely a configuration feature; it has nothing to do with Java class inheritance.
  • It is a great way to follow the DRY (Don't Repeat Yourself) principle in your code.

Recommended Spring Tutorials

If you found this helpful, check out these other videos from the Ram N Java channel:


Click here to watch on Youtube:
https://www.youtube.com/watch?v=zTkc96qnRd4&list=UUhwKlOVR041tngjerWxVccw

Click the below Image to Enlarge:
Spring bean configuration for inheritance [Override base bean value] | Spring Tutorial

Spring bean configuration for inheritance [Override base bean value] | Spring Tutorial

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0%20http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.ram.core</groupId>
    <artifactId>SpringDemo</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>SpringDemo</name>
    <url>http://maven.apache.org</url>

    <properties>
        <spring.version>5.0.2.RELEASE</spring.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <!-- Spring 5 dependencies -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>
</project>

Employee.java

package com.ram.model;

public class Employee
{
    private int id;
    private String name;
    private String countryName;

    public int getId()
    {
        return id;
    }

    public void setId(int id)
    {
        this.id = id;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getCountryName()
    {
        return countryName;
    }

    public void setCountryName(String countryName)
    {
        this.countryName = countryName;
    }

    @Override
    public String toString()
    {
        return "Employee [id=" + id + ", name=" + name + ", countryName="
                + countryName + "]";
    }

}

applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">


    <bean id="baseEmployeeJapan" class="com.ram.model.Employee" abstract="true">
        <property name="countryName" value="Japan" />
    </bean>

    <bean id="employee1" class="com.ram.model.Employee" parent="baseEmployeeJapan">
        <property name="id" value="32" />
        <property name="name" value="Peter" />
        <property name="countryName" value="India" />
    </bean>

    <bean id="employee2" class="com.ram.model.Employee" parent="baseEmployeeJapan">
        <property name="id" value="33" />
        <property name="name" value="John" />
    </bean>

</beans>

App.java

package com.ram.core;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.ram.model.Employee;

public class App
{
    public static void main(String[] args)
    {
        ApplicationContext context = new ClassPathXmlApplicationContext(
                "applicationContext.xml");

        System.out.println("---------------------------------------");

        Employee employee1 = (Employee) context.getBean("employee1");
        System.out.println(
                "Got employee1 object from the ApplicationContext(Spring Container)");

        System.out.println(employee1);
     
        System.out.println("---------------------------------------");

        Employee employee2 = (Employee) context.getBean("employee2");
        System.out.println(
                "Got employee2 object from the ApplicationContext(Spring Container)");

        System.out.println(employee2);

    }

}

Output

Aug 04, 2018 9:14:37 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5b37e0d2: startup date [Sat Aug 04 09:14:37 IST 2018]; root of context hierarchy
Aug 04, 2018 9:14:37 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
---------------------------------------
Got employee1 object from the ApplicationContext(Spring Container)
Employee [id=32, name=Peter, countryName=India]
---------------------------------------
Got employee2 object from the ApplicationContext(Spring Container)
Employee [id=33, name=John, countryName=Japan]

Click the below link to download the code:
https://sites.google.com/site/ramj2eev2/java_basics/SpringDemo_inheritance_override.zip?attredirects=0&d=1

Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_inheritance_override

Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/eb94a9e0ae07f3c6a86034ef414051430bbfc9bc/Spring_2018/SpringDemo_inheritance_override/?at=master

See also:

  • All JavaEE Videos Playlist
  • All JavaEE Videos
  • All JAVA EE Links
  • Spring Tutorial
  • Servlets Tutorial
  • All Design Patterns Links
  • JDBC Tutorial
  • Java Collection Framework Tutorial
  • JAVA Tutorial
  • Kids Tutorial
  • Cooking Tutorial
  • No comments:

    Post a Comment

    Tutorials