【发布时间】:2018-04-28 02:43:32
【问题描述】:
这是我的 AppConfig:
@Configuration
@EnableWebMvc
@ComponentScan
class AppConfig{
@Bean("myname")
fun name(): Name = Name("Quang")
}
数据类:
data class Name(val value: String ="")
我的控制器类:
@Controller
@RequestMapping("/")
class Main{
@RequestMapping("/")
@ResponseBody
fun index(@Autowired @Qualifier("myname") name: Name): Name {
//this return ""
return name
}
}
结果是“”而不是“Quang”。 但是现在如果我像这样从字段中注入它,它可以正常工作:
@Controller
@RequestMapping("/")
class Main{
@Autowired(required = true)
@Qualifier("myname")
lateinit var name:Name
@RequestMapping("/")
@ResponseBody
fun index(): Name {
//this return "Quang" as expected
return name
}
}
那么你能解释一下为什么我在方法参数中使用@Autowired 时不起作用
【问题讨论】:
-
这是一个处理方法。当您收到请求并且 Spring MVC 确定它应该由该方法处理时,它会被调用。 Spring MVC 不执行任何类型的
@Autowired注入。有许多受支持的参数类型(一些带有注释),这些类型都记录在规范中。 -
重读文档后,我意识到这真是一个愚蠢的问题:(。@Autowired 用于字段、构造函数和 setter 方法。
标签: spring spring-boot dependency-injection kotlin