dineshonjava

Injecting Inner Beans in Spring with Example

Injecting Inner Beans in Spring-inner beans are beans that are defined within the scope of another bean.whenever a bean is used for only one particular property, it's advise to declare it as an inner bean.It supported in setter injection and constructor injection.
Injecting Inner Beans in Spring with Example

@ImageSource-SlideShare.net

In the previous chapter you have seen that how to inject on object been(point) to another bean(triangle) with using setter-injection methodology. Here we discuss same example with the concept of the injecting inner bean. Inner Bean means bean with in the bean i.e one bean(point) defined inside the another bean(triangle).
In the bean configuration file(spring.xml) there are four beans(ids are triangle, pointA, pointB and pointC) defined in the previous chapter suppose that beans (pointB and pointC) of the Point class are using only for triangle bean definition then there no need to defined the Point been in separately in the  bean configuration file(spring.xml) and pointA is the common point using by different shape as Circle, Rectangle etc si its defined separately in the  bean configuration file(spring.xml). The best idea at this situation we have to defined Point bean 's definition as inner bean definition with in the Triangle bean.

<bean class="com.dineshonjava.sdnext.innerBean.tutorial.Triangle" id="triangle">
   <property name="pointA" ref="pointA"></property>
   <property name="pointB">
      <bean class="com.dineshonjava.sdnext.innerBean.tutorial.Point">
  <property name="x" value="-20"></property>
  <property name="y" value="0"></property>
      </bean>
   </property>
   <property name="pointC">
      <bean class="com.dineshonjava.sdnext.innerBean.tutorial.Point">
 <property name="x" value="20"></property>
 <property name="y" value="0"></property>
      </bean>
   </property>
</bean>
<bean class="com.dineshonjava.sdnext.innerBean.tutorial.Point" id="pointA">
   <property name="x" value="0"></property>
   <property name="y" value="0"></property>
</bean>

Lets see with example..
Triangle.java
package com.dineshonjava.sdnext.innerBean.tutorial;

public class Triangle 
{
 private Point pointA;
 private Point pointB;
 private Point pointC;
 
 /**
  * @param pointA the pointA to set
  */
 public void setPointA(Point pointA) {
  this.pointA = pointA;
 }

 /**
  * @param pointB the pointB to set
  */
 public void setPointB(Point pointB) {
  this.pointB = pointB;
 }

 /**
  * @param pointC the pointC to set
  */
 public void setPointC(Point pointC) {
  this.pointC = pointC;
 }

 public void draw()
 {
  System.out.println("PointA is ("+pointA.getX()+", "+pointA.getY()+")");
  System.out.println("PointB is ("+pointB.getX()+", "+pointB.getY()+")");
  System.out.println("PointC is ("+pointC.getX()+", "+pointC.getY()+")");
 }
}
Point.java
package com.dineshonjava.sdnext.innerBean.tutorial;

public class Point
{
 private int x;
 private int y;
 /**
  * @return the x
  */
 public int getX() {
  return x;
 }
 /**
  * @param x the x to set
  */
 public void setX(int x) {
  this.x = x;
 }
 /**
  * @return the y
  */
 public int getY() {
  return y;
 }
 /**
  * @param y the y to set
  */
 public void setY(int y) {
  this.y = y;
 }
}
Now see how to define beans as inner beans in the following files.
Spring.xml
<beans class="com.sdnext.innerBean.tutorial.Triangle" triangle="triangle" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p" xmlns:security="http://www.springframework.org/schema/security" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemalocation="http://www.springframework.org/schema/beans&gt;
  
<bean id="triangle">
   <property name="pointA" ref="pointA"></property>
   <property name="pointB">
      <bean class="com.dineshonjava.sdnext.innerBean.tutorial.Point">
  <property name="x" value="-20"></property>
  <property name="y" value="0"></property>
      </bean>
   </property>
   <property name="pointC">
      <bean class="com.dineshonjava.sdnext.innerBean.tutorial.Point">
 <property name="x" value="20"></property>
 <property name="y" value="0"></property>
      </bean>
   </property>

<bean class="com.dineshonjava.sdnext.innerBean.tutorial.Point" id="pointA">
   <property name="x" value="0"></property>
   <property name="y" value="0"></property>
</bean>
</beans>
DrawingApp.java
package com.dineshonjava.sdnext.innerBean.tutorial;

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

/**
 * @author Dinesh Rajput
 *
 */
public class DrawingApp 
{
 /**
  * @param args
  */
 public static void main(String[] args) 
 {
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
  Triangle triangle = (Triangle) context.getBean("triangle");
  triangle.draw();
 }

}

Run the application and we get same output as previous

output:
Jun 23, 2012 12:30:25 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@ab50cd: startup date [Sat Jun 23 12:30:25 IST 2012]; root of context hierarchy
Jun 23, 2012 12:30:26 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [spring.xml]
Jun 23, 2012 12:30:26 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@14c1103: defining beans [triangle,zeroPoint,Point2,Point3]; root of factory hierarchy
PointA is (0, 0)
PointB is (-20, 0)
PointC is (20, 0)

Aliases of Bean:
Aliase is way in which to give different name to the same bean. The reason for that naming of same bean used as different as per as our naming convention in our application requirement. In the Bean Configuration file(spring.xml) we have defined as the following.
<beans>
   ----
   <bean class="com.dineshonjava.sdnext.innerBean.tutorial.Triangle" id="triangle"> 
   -----
   -----
   </bean>
   <bean ---="">
      ----
   </bean>

    <alias alias="triangleAlias" name="triangle">
</alias></beans>
Here alias element has two attribute one is name and another is alias. name attribute has the value of id of which bean required to alias. alias attribute has the value what ever you want call as alias.
Here attribute name has the value "triangle"(id of triangle bean) and alias attribute has the value "triangleAlias" and get this bean in our application as following way.
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
Triangle triangle = (Triangle) context.getBean("triangleAlias");
triangle.draw();


Difference between ref and idref: In ref can have the value of id of bean as well as name of the bean.
But the idref can have only and only id of the bean.
Using ref:
<bean class="com.sdnext.innerBean.tutorial.Triangle" id="triangle">
<property name="pointA" ref="zeroPoint"></property>
</bean>
<bean class="com.dineshonjava.sdnext.innerBean.tutorial.Point" name="zeroPoint">
</bean>
Using idref:
<bean class="com.sdnext.innerBean.tutorial.Triangle" id="triangle">
<property name="pointA">
<idref bean="zeropoint">  
</idref>
</property>
</bean>
<bean class="com.dineshonjava.sdnext.innerBean.tutorial.Point" id="zeroPoint">
</bean>

In Next Chapter we will discuss about Injecting Collection to Beans in Spring with Example in Application.
Spring Related Topics you may like
  1. Spring Interview Questions and Answers
  2. Spring AOP Interview Questions and Answers
  3. Spring MVC Interview Questions
  4. Spring Security Interview Questions and Answers
  5. Spring REST Interview Questions and Answers
  6. Spring Boot Interview Questions and Answers
  7. Spring Boot Microservices Interview Questions and Answers
  8. Dependency Injection (DI) in Spring
  9. Spring IoC Container
  10. What is Bean Factory in Spring
  11. ApplicationContext in Spring
  12. Bean Autowiring in Spring
  13. Spring Bean Scopes
  14. Create Custom Bean Scope in Spring Example
  15. Using ApplicationContextAware in Spring
  16. Spring Bean Life Cycle and Callbacks
  17. BeanPostProcessor in Spring
  18. BeanFactoryPostProcessor in Spring
  19. Annotations in Spring and Based Configuration
  20. Spring JSR-250 Annotations
  21. JSR 330 Annotations in Spring
  22. Spring @Component, @Repository, @Service and @Controller Stereotype Annotations
  23. Method injection with Spring using Lookup method property
  24. Spring AOP-Introduction to Aspect Oriented Programming
  25. @Aspect Annotation in Spring
  26. Spring AOP AspectJ @Before Annotation Advice Example
  27. Spring AOP Before Advice Example using XML Config
  28. Spring AOP AspectJ @After Annotation Advice Example
  29. Spring AOP After Advice Example using XML Config
  30. Spring AOP AspectJ @AfterReturning Annotation Advice Example
  31. Spring AOP After-Returning Advice Example using XML Config
  32. Spring AOP AspectJ @AfterThrowing Annotation Advice Example
  33. Spring AOP After Throwing Advice Example using XML Config
  34. Spring AOP AspectJ @Around Annotation Advice Example
  35. Spring AOP Around Advice Example using XML Config
  36. Spring AOP Proxies in Spring
  37. Spring AOP Transaction Management in Hibernate
  38. Spring Transaction Management
  39. Spring Declarative Transaction Management Example
  40. Spring AOP-Ordering of Aspects with Example
  41. Spring Security Java Based Configuration with Example
  42. Spring Security XML Namespace Configuration Example

                                          
                                                        << Previous || Next >>