@Autowired 在方法参数中不起作用
Posted
技术标签:
【中文标题】@Autowired 在方法参数中不起作用【英文标题】:@Autowired doesn't work in method parameter 【发布时间】: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 方法。
【参考方案1】:
根据文档:
将构造函数、字段、setter 方法或 config 方法标记为 由 Spring 的依赖注入工具自动装配。
在您的第一个示例中,Spring 不会自动装配任何东西。
【讨论】:
以上是关于@Autowired 在方法参数中不起作用的主要内容,如果未能解决你的问题,请参考以下文章