【问题标题】:@Autowired doesn't work in method parameter@Autowired 在方法参数中不起作用
【发布时间】: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


【解决方案1】:

根据文档:

将构造函数、字段、setter 方法或 config 方法标记为 由 Spring 的依赖注入工具自动装配。

在您的第一个示例中,Spring 不会自动装配任何东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多