If you want to call a method in a spring bean, and the method’s name is unknown, you should use java reflection to call the method.

1. Pom.xml

Here we use spring boot 1.4.3

<dependencyManagement>
    <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.4.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2. Define two spring beans

Here we define two beans:

  • The first bean is the server bean, which would call the second bean’s method by reflection
  • The second bean is the bean to be called by the server bean, supply some methods to be called
@Component("Server")
public class Server {
	@Autowired
    private ApplicationContext appContext;//Here we inject the spring app context for later use.

}
@Component("MethodsBean")
public class MethodsBean {
	public void aMethod() {
		System.out.println("test");
	}
}

3. Use java reflection to call the MethodsBean’s any method

Now it’s the trick:

String methodName = "aMethod"; // the method to be called

Object bean = appContext.getBean("MethodsBean");//defined by the @Component params

Method method = bean.getClass().getMethod(methodName);
if (method != null) {
    return (Integer) method.invoke(bean);//java reflection here.

} else {
    //print error message.

}

The core steps are as follows:

  • use appContext to get the bean object
  • use methodName as the param to search for the Method object
  • if got the method object, then use java reflection to invoke the method

You can find detail documents about the springboot and java reflection here: