SpringBoot动态调用实现类的方法

功能目的:传入类名、方法名和参数。动态执行Springboot的实现类方法
主要实现流程:获取SpringBoot创建好的工厂。

1.工具类:ApplicationContextUtils

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

//用于获取SpringBoot创建好的工厂
//交给Spring管理
@Component
public class ApplicationContextUtils implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    //将创建好的工厂以参数形式传递给你
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }

    //提供在工厂中获取对象的方法
    public  Object getBean(String beanName){
        return applicationContext.getBean(beanName);
    }

}


2.测试方法

       
       @Resource
       private ApplicationContextUtils  applicationContextUtils;
       
       
        try {
            //定义入参类型
            Class[] argsType = new Class[]{Class.forName("java.lang.Long")};
            //定义入参参数
            Object[] args = new Object[]{stationId};
            //从Spring工厂获取类的实例
            Object owner=applicationContextUtils.getBean("实现类的Service");
            //调用哪个方法
            String methodName="实现类的方法名称";
            Class ownerClass = owner.getClass();
            Method method = ownerClass.getMethod(methodName, argsType);
            Object objRtn = method.invoke(owner, args);
            System.out.println(objRtn);
        } catch (Exception e) {
            e.printStackTrace();
        }


程序员之家

程序员之家
请先登录后发表评论
  • 最新评论
  • 总共0条评论