【发布时间】:2017-05-08 23:21:22
【问题描述】:
目前我尝试用 Kotlin 重写我的 Java Spring Boot 应用程序。我遇到了一个问题,在我所有使用@Service 注释的类中,依赖注入都无法正常工作(所有实例都是null)。这是一个例子:
@Service
@Transactional
open class UserServiceController @Autowired constructor(val dsl: DSLContext, val teamService: TeamService) {
//dsl and teamService are null in all methods
}
在 Java 中做同样的事情没有任何问题:
@Service
@Transactional
public class UserServiceController
{
private DSLContext dsl;
private TeamService teamService;
@Autowired
public UserServiceController(DSLContext dsl,
TeamService teamService)
{
this.dsl = dsl;
this.teamService = teamService;
}
如果我在 Kotlin 中使用 @Component 注释组件,一切正常:
@Component
open class UserServiceController @Autowired constructor(val dsl: DSLContext, val teamService: TeamService) {
//dsl and teamService are injected properly
}
Google 为 Kotlin 和 @Autowired 提供了许多不同的方法,我尝试了这些方法,但结果都是相同的 NullPointerException
我想知道 Kotlin 和 Java 之间的区别是什么以及如何解决这个问题?
【问题讨论】:
-
你试过把 val 改成 var 吗?
-
是的,我都试过了。
-
尝试在 val 之前添加 @Autowired 并删除构造函数。这对我有用
-
也许你使用的是
GenericApplicationContext而不是AnnotationConfigApplicationContext
标签: java spring spring-mvc spring-boot kotlin