Spring – Instance Factories | Code Factory


Donate : Link

Medium Blog : Link

Applications : Link

This image has an empty alt attribute; its file name is image-1.png

Spring Tutorial Index Page: Link

Create Java Project

  • Open Eclipse
  • Go to File -> New -> Others… -> Java Project
  • Create FactoryClasses project
  • Right click on project -> Build Path -> Configure Build Path -> Libraries tab -> Add External JARs
    • commons-logging-X.X.jar
    • spring-beans-X.X.X.jar
    • spring-context-X.X.X.jar
    • spring-core-X.X.X.jar
  • * You can find dtd information from spring-beans-X.X.X.jar -> org -> springframework -> beans -> factory -> xml -> spring-beans.dtd (line no 36 & 37)

spring.xml

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
	"http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>
	<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
		<property name="staticMethod" value="com.codeFactory.beans.CarFactory.setCompanyName"></property>
		<property name="arguments">
			<list>
				<value>com.codeFactory.beans.JLR</value>
			</list>
		</property>
	</bean>
	
	<bean id="cf" class="com.codeFactory.beans.CarFactory" factory-method="getInstance" />
</beans>

Car.java

package com.codeFactory.beans;

/**
 * @author code.factory
 *
 */
public interface Car {
	public void drive();
}

CarFactory.java

package com.codeFactory.beans;

/**
 * @author code.factory
 *
 */
public class CarFactory {
	public static String companyName;

	public static void setCompanyName(String companyName) {
		CarFactory.companyName = companyName;
	}

	/* static factory */
	public static Car getInstance() throws Exception {
		return (Car) Class.forName(companyName).newInstance();
	}
}

Audi.java

package com.codeFactory.beans;

/**
 * @author code.factory
 *
 */
public class Audi implements Car {

	@Override
	public void drive() {
		System.out.println("Maximum speed is 200");
	}
}

JLR.java

package com.codeFactory.beans;

/**
 * @author code.factory
 *
 */
public class JLR implements Car {

	@Override
	public void drive() {
		System.out.println("Maximum speed is 250");
	}
}

Client.java

package com.codeFactory.test;

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

import com.codeFactory.beans.Car;

/**
 * @author code.factory
 *
 */
public class Client {
	public static void main(String... args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("com/codeFactory/resources/spring.xml");
		
		Car c = (Car) context.getBean("cf");
		c.drive();
	}
}

Output:

Maximum speed is 250

Leave a comment