Spring 5 method replacement example


In this tutorial, we are going to learn about Spring method replacement. You can replace or override the existing method by implementing MethodReplacer interface. This interface has only one method i.e.

public Object reimplement(Object obj, Method method, Object[] args) throws Throwable;

Suppose you have a class Car and it has many methods.

public class Car {

	public void design() {
		System.out.println("Old car design.");
	}

	public void breaks() {
		System.out.println("Old car break.");
	}
}

And you want to replace or override the breaks() method properties. To do this you can define the new property by overriding the reimplement() method.

Let’s check the complete example.

Spring Beans

Create the Car class which have some methods. In this class I’m going to override the breaks() method properties without affecting anything else.

Car.java
package org.websparrow.beans;

public class Car {

	public void design() {
		System.out.println("Old car design.");
	}

	public void breaks() {
		System.out.println("Old car break.");
	}
}

Now create another class NewBreak and implements the MethodReplacer interface. Override the reimplement() method and define the new properties of breaks() method.

NewBreak.java
package org.websparrow.beans;

import java.lang.reflect.Method;

import org.springframework.beans.factory.support.MethodReplacer;

public class NewBreak implements MethodReplacer {

	@Override
	public Object reimplement(Object obj, Method method, Object[] args) throws Throwable {

		// new property of Car.breaks() method.
		System.out.println("New car break.");

		return obj;
	}
}

Spring Beans Configuration

In the configuration file, Spring will provide the <replaced-method /> child element of <bean /> element. Pass the name of method you want to override in name attribute and bean id of corresponding class to the replacer attribute.

config.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="break" class="org.websparrow.beans.NewBreak" />

	<bean id="car" class="org.websparrow.beans.Car">
		<replaced-method name="breaks" replacer="break" />
	</bean>

</beans>

Run it

Load the configuration file and run it.

Test.java
package org.websparrow.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.websparrow.beans.Car;

public class Test {

	public static void main(String[] args) {

		ApplicationContext ap = new ClassPathXmlApplicationContext("config.xml");

		Car car = (Car) ap.getBean("car");
		car.design();
		car.breaks();
	}
}
Output:

You can see that breaks() method properties has been overridden by new one.

Old car design.
New car break.

Share this article on: