What is the difference between spring factory-method and factory-bean?

Sarma picture Sarma · Sep 12, 2013 · Viewed 58.4k times · Source

I am new Springs. In Bean tag I found factory-method and factory-bean Attributes. What is the difference between factory-method and factory-bean?

I am using factory-method to call my getInstance static method to create singleton object.

What is factory-bean used for?


For given replies, What I understood was

Factory-method is used for calling a static method to create object in same bean class.

Factory-bean is used for creating a object based on factory design pattern.

Ex:- I am asking a EggPlant object from VegetableFactory (Which will return vegetable object which was asked)class by passing my vegetable name(EggPlant in this case).

Please correct if I am wrong?

Answer

Achilles Ram Nakirekanti picture Achilles Ram Nakirekanti · Nov 21, 2015
factory-method: represents the factory method that will be invoked to inject the bean.
factory-bean: represents the reference of the bean by which factory method will be invoked. It is used if factory method is non-static.

Printable.java

package com.javatpoint;  
public interface Printable {  
    void print();  
}  

A.java

package com.javatpoint;  
public class A implements Printable{  
    @Override  
    public void print() {  
        System.out.println("hello a");  
    }      
} 

B.java

package com.javatpoint;  
public class B implements Printable{  
    @Override  
    public void print() {  
        System.out.println("hello b");  
    }  
}  

PrintableFactory.java

package com.javatpoint;  
public class PrintableFactory {  
    //non-static factory method  
    public Printable getPrintable(){  
        return new A();//return any one instance, either A or B  
    }  
}  

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

<bean id="pfactory" class="com.javatpoint.PrintableFactory"></bean>  
<bean id="p" class="com.javatpoint.Printable" factory-method="getPrintable"   
factory-bean="pfactory"></bean>  

</beans>  

Notice that public Printable getPrintable() of PrintableFactory.java is a non-static method. Generally if we want access/call method or other resources of the a class we have to create it's instance. Similarly in that we created it bean. using bean's reference variable pfactory we are calling the factory method getPrintable.