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 has some methods. In this class, I’m going to override the breaks()
method properties without affecting anything else.
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.
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 the method you want to override in name attribute and bean id of corresponding class to the replacer attribute.
<?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.
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();
}
}
You can see that breaks()
method properties has been overridden by the new one.
Old car design.
New car break.
Download Source Code: spring5-method-replacement-example