如何从Bean动态调用方法

时间:2018-12-03 09:14:42

标签: java spring-boot spring-data

我使用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()

如何调用该方法?

2 个答案:

答案 0 :(得分:2)

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

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

因此解决方法是:

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

答案 1 :(得分:1)

从错误.lib可以清楚地看出,您的代码正在尝试获取没有参数的方法,而该方法实际上是不存在的。

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

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