Java 代理对象调用引发参数类型不匹配
我使用代理调用另一个代理失败。始终引发参数类型不匹配异常。有人能帮忙吗 这是代码Java 代理对象调用引发参数类型不匹配,java,kotlin,generics,mybatis,dynamic-proxy,Java,Kotlin,Generics,Mybatis,Dynamic Proxy,我使用代理调用另一个代理失败。始终引发参数类型不匹配异常。有人能帮忙吗 这是代码 // 1, use mybatis sqlSessionFactory create a Proxy object for MapperProxy. @Suppress("UNCHECKED_CAST") private fun <T> createMapper(sqlSessionFactory: SqlSessionFactory, clazz: Class<T>):
// 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")
}
//1,使用mybatis sqlSessionFactory为MapperProxy创建代理对象。
@抑制(“未选中的_CAST”)
私有fun createMapper(sqlSessionFactory:sqlSessionFactory,clazz:Class):T{
返回Proxy.newProxyInstance(
clazz.classLoader,
排列(克拉兹),
KtMapperProxy(
sqlSessionFactory.configuration.getMapper(
克拉兹,
sqlSessionFactory.openSession()
)
)
)as T
}
//2,这个类是代理类。
类KtMapperProxy(私有val映射器:T):调用处理程序{
覆盖有趣的调用(代理:Any、方法:method、args:Array?):Any{
return method.invoke(映射器,args)
}
}
//3,下面是要调用的UserMapper类方法。
fun getById(@Param(“id”)id:Long):用户
//这是一个测试。
@试验
fun`test mapper query`(){
val userMapper=DataSourceHelper.getMapper(sqlSessionFactory,userMapper::class.java)
assertEquals(userMapper.getById(1L).username,“user\u 1”)
}
我发现了问题所在。我应该在使用vararg参数调用方法时扩展args。因此,应该是method.invoke(映射器,*args),而不是method.invoke(映射器,args)