🚀 Love learning Java and Spring?
Don't miss out on the latest tutorials! Join our community today.
SUBSCRIBE TO RAM N JAVAUnderstanding 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
parentattribute 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
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
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
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
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
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:
No comments:
Post a Comment