JavaBeat

  • Home
  • Java
    • Java 7
    • Java 8
    • Java EE
    • Servlets
  • Spring Framework
    • Spring Tutorials
    • Spring 4 Tutorials
    • Spring Boot
  • JSF Tutorials
  • Most Popular
    • Binary Search Tree Traversal
    • Spring Batch Tutorial
    • AngularJS + Spring MVC
    • Spring Data JPA Tutorial
    • Packaging and Deploying Node.js
  • About Us
    • Join Us (JBC)
  • Privacy
  • Contact Us

Bean Definition Inheritance in Spring

November 10, 2013 by Krishna Srinivasan Leave a Comment

In my previous post I have explained how to inherit collection values from the parent bean. Spring offers out of the box support on inheritance for the bean definitions in the XML configuration file. You can define any number of beans and extend them by using the parent  attribute in the bean element. Child bean can inherit all the values, properties, methods, etc. from the parent beans. If you define the same method in the child bean, it simply overrides them in the child bean.

If parent bean have the class definition, then child bean need not define classes, it will use the parent bean. If you want to mention class name for the child bean, then it must have the same properties defined in the parent bean. Because it will try to search for the properties in the parent bean.

The parent bean is declared as abstract in the configuration file, it indicates that Spring container will not create any instance for that bean. If you try to access that bean, it will throw exception. If you don’t use a class type for the parent bean, then declaring it as abstract is mandatory.

Look at the below example. This is very simple example to demonstrate how to use the feature, you could try our more advanced examples and post your comments.

Person.java

[code lang=”java”]
package javabeat.net.core.ioc;

public class Person {
private String name;
private String phone;
private String email;
private String city;
private String country;
public Person(){
System.out.println("Initializing bean…");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String toString(){
StringBuffer buffer = new StringBuffer();
buffer.append("Name : " + this.name);
buffer.append("Phone : " + this.phone);
buffer.append("Email : " + this.email);
buffer.append("City : " + this.city);
buffer.append("Country : " + this.country);
return buffer.toString();
}

}
[/code]

spring-beans-ioc.xml

[code lang=”xml”]
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
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-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">

<context:component-scan base-package="javabeat.net.core.ioc"/>
<bean id="personBean" class="javabeat.net.core.ioc.Person" abstract="true">
<property name="name" value="Vijay"/>
<property name="phone" value="678567"/>
<property name="email" value="vijay@javabeat.net"/>
<property name="city" value="Bangalore"/>
<property name="country" value="India"/>
</bean>
<bean id="personBeanSub1" parent="personBean" >
<property name="name" value="Muthu"/>
<property name="phone" value="986756"/>
<property name="email" value="muthu@javabeat.net"/>
</bean>
<bean id="personBeanSub2" parent="personBean">
<property name="name" value="Hari"/>
<property name="phone" value="452345"/>
<property name="email" value="hari@javabeat.net"/>
</bean>
<bean id="personBeanSub3" parent="personBean"/>
</beans>
[/code]

SpringContextLoader.java

[code lang=”java”]
package javabeat.net.core.ioc;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringContextLoader {
public static void main (String args[]){
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("javabeat/net/core/ioc/spring-beans-ioc.xml");
Person child1 = (Person)applicationContext.getBean("personBeanSub1");
Person child2 = (Person)applicationContext.getBean("personBeanSub2");
Person child3 = (Person)applicationContext.getBean("personBeanSub3");
System.out.println(child1.toString());
System.out.println(child2.toString());
System.out.println(child3.toString());
applicationContext.close();
}
}
[/code]

If you run the above example, the result will be:

[code]
Initializing bean…
Initializing bean…
Initializing bean…
Name : MuthuPhone : 986756Email : muthu@javabeat.netCity : BangaloreCountry : India
Name : HariPhone : 452345Email : hari@javabeat.netCity : BangaloreCountry : India
Name : VijayPhone : 678567Email : vijay@javabeat.netCity : BangaloreCountry : India
[/code]

Filed Under: Spring Framework Tagged With: Spring IOC

About Krishna Srinivasan

He is Founder and Chief Editor of JavaBeat. He has more than 8+ years of experience on developing Web applications. He writes about Spring, DOJO, JSF, Hibernate and many other emerging technologies in this blog.

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Follow Us

  • Facebook
  • Pinterest

As a participant in the Amazon Services LLC Associates Program, this site may earn from qualifying purchases. We may also earn commissions on purchases from other retail websites.

JavaBeat

FEATURED TUTORIALS

Answered: Using Java to Convert Int to String

What is new in Java 6.0 Collections API?

The Java 6.0 Compiler API

Copyright © by JavaBeat · All rights reserved