kotlin.UninitializedPropertyAccessException: lateinit property loginService has not been initialized
注解類加載延遲導緻的異常
解決方法一:工廠模式
建一個工廠類,如UserServiceFactory,使用該方法
- java版:
public abstract class UserServiceFactory {
private static UserService userService = new UserServiceMemoryImpl();
public static UserService getUserService() {
return userService;
}
}
- kotlin版:
abstract class ServiceFactory {
companion object {
private val loginService: LoginService = LoginService()
open fun getUserService(): LoginService {
return loginService
}
}
}
解決方法二:手動注入Spring上下文,擷取bean
實作ApplicationContextAware接口
建立一個實體類并實作接口,重寫接口内的
ApplicationContextAware
方法來完成擷取
setApplicationContext
執行個體的方法
ApplicationContext
- java版:
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
// 使用
Person person = getApplicationContext().getBean(Person.class)
- kotlin版:
private lateinit var ctx: ApplicationContext
override fun setApplicationContext(applicationContext: ApplicationContext) {
this.ctx = applicationContext
}
// 使用
val person = ctx.getBean(Person::class.java)
以上!