728x90 AdSpace

Thursday, 10 April 2014

Spring DI - Injecting Inner Beans

In this tutorial we are going to see about Spring Injecting Inner Beans .
Inner Bean
A <bean/> element inside the <property/> or <constructor-arg/> elements defines a so-called inner bean.
An inner bean definition does not require a defined id or name; the container ignores these values. It also ignores the scope flag. Inner beans are always anonymous and they are always created with the outer bean. It is not possible to inject inner beans into collaborating beans other than into the enclosing bean.
See the example bean.xml given below.
<bean id="outer" class="...">
<!-- instead of using a reference to a target bean, simply define the target bean inline -->
<property name="target">
<bean class="com.example.Person"> <!-- this is the inner bean -->
<property name="name" value="Appu .T"/>
<property name="age" value="25"/>
</bean>
</property>
</bean>

Step by step procedure to create Spring Program using Eclipse given below.
Follow the Simple steps.

1. Select File –> New –> Java Project from your Eclipse IDE.

2.Create project called SpringInnerBean.

3. Add the following jars into your build path.

commons-logging-1.1.3.jar
spring-beans-3.2.6.RELEASE.jar
spring-context-3.2.6.RELEASE.jar
spring-context-support-3.2.6.RELEASE.jar
spring-core-3.2.6.RELEASE.jar
spring-expression-3.2.6.RELEASE.jar

4. Now create package com.javatutorialscorner.spring under SpringInnerBean Project

5. Next create Student class under com.javatutorialscorner.spring package

Student.java

package com.javatutorialscorner.spring;

public class Student {
private String name;

Student() {
System.out.println("Inside Student() Constructor");
}

public void getName() {
System.out.println("Strudent Name : " + name);
}

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

6. Next create InnerBean class under com.javatutorialscorner.spring package

InnerBean.java

package com.javatutorialscorner.spring;

public class InnerBean {

InnerBean() {
System.out.println("Inside InnerBean() constructor");
}

private Student student;

public Student getStudent() {
return student;
}

public void setStudent(Student student) {
System.out.println("Inside setStudent()");
this.student = student;
}

public void studentName() {
student.getName();
}

}


7. Now Create RunApp class which contains Bean configuration path to load configuration from Bean.xml file

RunApp.java

package com.javatutorialscorner.spring;

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

public class RunApp {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

ApplicationContext context = new ClassPathXmlApplicationContext(
"Beans.xml");
InnerBean innerBean = (InnerBean) context.getBean("innerBean");
innerBean.studentName();
}

}

In above program

First step I created Application context using ClassPathXmlApplicationContext  which load configuration from bean file  which located in class path of application, It take care of creating and initializing all the objects (Beans) declared in bean.xml

Next getBean() method used to get particular bean from created context. This method used bean name as parameter and returns generic object. We can caste to actual object.

Once Object Created you can access any method from that class.

7. Create Bean.xml at where your class files created (ClassPathXmlApplicationContext tries to load bean file from class path).

Bean.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="innerBean" class="com.javatutorialscorner.spring.InnerBean">
<property name="student">
<bean class="com.javatutorialscorner.spring.Student">
<property name="name" value="Ram"></property>
</bean>
</property>
</bean>

</beans>

Bean.xml is default name given to bean configuration file. You can choose any name for your bean.xml but you can use file name in main application to create context and your file available in your class path must be same.

Bean.xml is used to assign unique ID to different beans and controls the creation object with different values, using above file you can pass any value to   variables without changing the class file.

Now you can run the program see the following output in console.

Inside InnerBean() constructor
Inside Student() Constructor
Inside setStudent()
Strudent Name : Ram
Annamalai Thangaraj

Annamalai is working as Technical Lead in Leading Telecom company with 5+ years experience in Identity and Access Management , Telecom and Networks, BigData, Java, Spring, Struts, Hibernate, AngularJS, and Enterprise Web Application Development.

Website: Java Tutorials Corner

Shop and help us

Flipkart Offer Snapdeal offer Amazon.in offer Amazon.com offer
  • Blogger Comments
  • Facebook Comments
  • Disqus Comments

0 comments:

Post a Comment

Item Reviewed: Spring DI - Injecting Inner Beans Rating: 5 Reviewed By: Annamalai Thangaraj