【问题标题】:How to call a method from a bean dynamically如何动态调用 bean 中的方法
【发布时间】:2018-12-03 09:14:41
【问题描述】:

我使用spring boot,这样从数据库中查询:

@Repository
public interface MyRepository extends CrudRepository<MyEntity, Integer> {
  List<MyEntity> findAllByIdIn(List<Integer> ids);
}

我想动态调用这个方法“findAllByIdIn”:

Object bean = context.getBean("myRepository");
bean.getClass().getMethod("findAllByIdIn").invoke(bean, ids);

我遇到了一个异常:

java.lang.NoSuchMethodException: com.sun.proxy.$Proxy145.findAllByIdIn()

如何调用该方法?

【问题讨论】:

    标签: java spring-boot spring-data


    【解决方案1】:

    getMethod 接受 2 个参数。第一个是方法名,第二个是方法参数类型的可变参数。

    您的代码尝试获取不带参数的 findAllByIdIn 方法,但您的存储库没有它。

    所以解决方法是:

    bean.getClass().getMethod("findAllByIdIn", List.class)
    

    【讨论】:

      【解决方案2】:

      从错误java.lang.NoSuchMethodException: com.sun.proxy.$Proxy145.findAllByIdIn() 可以清楚地看出,您的代码正在尝试获取一个没有参数的方法,而该方法实际上并不存在。

      所以也尝试传递参数,因为它期望像下面这样的参数。

      getMethod("findAllByIdIn",List.class)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-29
        • 1970-01-01
        • 2013-07-17
        • 1970-01-01
        相关资源
        最近更新 更多