现象
java.lang.NoSuchMethodError: No static method aspectOf()Lcom/example/test/Check
原因
将Java的CheckLoginAspect 类转换为kotlin的类,出现了这样的一个问题。
然后在类内部增加如下代码
companion object {
@JvmStatic
fun aspectOf(): CheckLoginAspect {
return CheckLoginAspect()
}
}
加入后的整体代码如下:
package com.example.test
import android.util.Log
import com.example.test.LoginService.Companion.checkLogin
import org.aspectj.lang.ProceedingJoinPoint
import org.aspectj.lang.annotation.Around
import org.aspectj.lang.annotation.Aspect
import org.aspectj.lang.reflect.MethodSignature
/**
* 检查登录切面
*/
@Aspect
class CheckLoginAspect {
companion object {
@JvmStatic
fun aspectOf(): CheckLoginAspect {
return CheckLoginAspect()
}
}
@Around("execution(* *(..))")
@Throws(Throwable::class)
fun doBeforeOnClick(joinPoint: ProceedingJoinPoint) {
Log.e(TAGConstant.TAG, "doBeforeOnClick 执行")
try {
// 获取方法
val methodSignature = joinPoint.signature as MethodSignature
Log.e(TAGConstant.TAG, "方法名字:" + methodSignature.method.name)
// 获取方法上面的注解
val checkLogin = methodSignature.method.getAnnotation(CheckLogin::class.java)
// 判断注解是否为空
if (checkLogin == null) {
Log.e(TAGConstant.TAG, "CheckLogin注解为空")
joinPoint.proceed()
return
}
// 注解不为空
Log.e(TAGConstant.TAG, "CheckLogin注解不为空")
// 检查登录状态,如果登录,继续执行下面的方法,如果没有登录,跳转到登录界面
checkLogin(object : LoginStateListener {
override fun logined() {
Log.e(TAGConstant.TAG, "登录成功,继续执行")
try {
joinPoint.proceed()
} catch (throwable: Throwable) {
throwable.printStackTrace()
}
}
override fun unlogin() {
Log.e(TAGConstant.TAG, "登录失败,跳转到未登录界面")
}
})
} catch (e: Exception) {
joinPoint.proceed()
}
}
}