代理对象调用引发参数类型不匹配



我使用代理调用另一个代理失败。总是引发参数类型不匹配异常。有人能帮忙吗?

这是代码。

// 1, use mybatis sqlSessionFactory create a Proxy object for MapperProxy.
@Suppress("UNCHECKED_CAST")
private fun <T> createMapper(sqlSessionFactory: SqlSessionFactory, clazz: Class<T>): T {
return Proxy.newProxyInstance(
clazz.classLoader,
arrayOf(clazz),
KtMapperProxy(
sqlSessionFactory.configuration.getMapper(
clazz,
sqlSessionFactory.openSession()
)
)
) as T
}
// 2, this class is the Proxy class.
class KtMapperProxy<T>(private val mapper: T) : InvocationHandler {
override fun invoke(proxy: Any, method: Method, args: Array<Any?>?): Any {
return method.invoke(mapper, args)
}
}
// 3, here is the UserMapper class method be called.
fun getById(@Param("id") id: Long): User
// 4, this is test.
@Test
fun `test mapper query`() {
val userMapper = DataSourceHelper.getMapper(sqlSessionFactory, UserMapper::class.java)
assertEquals(userMapper.getById(1L).username, "user_1")
}

我解决了这个问题当调用带有vararg-param的方法时,我应该扩展args因此,它应该是method.uinvoke(mapper,*args(,而不是method.uinvake(maper,args(

相关内容

最新更新