Java RestController方法注入不';不支持单例(注释驱动)
文档中说Spring的默认bean范围是一个单例 我找不到任何关于绕过此范围的方法级注入的信息 使用此配置Java RestController方法注入不';不支持单例(注释驱动),java,spring,Java,Spring,文档中说Spring的默认bean范围是一个单例 我找不到任何关于绕过此范围的方法级注入的信息 使用此配置 @Configuration public class ApplicationConfiguration { @Bean public ModuleProvider getModuleProvider() { return new ModuleProvider(); } } 方法一(我期望这两种结果): 点击两次,输出为 application.M
@Configuration
public class ApplicationConfiguration {
@Bean
public ModuleProvider getModuleProvider() {
return new ModuleProvider();
}
}
方法一(我期望这两种结果):
点击两次,输出为
application.ModuleProvider@673f63cb
application.ModuleProvider@673f63cb
application.ModuleProvider@1cc4fbcb
application.ModuleProvider@57248dbf
方法二:
@RestController
@Scope(value = "request")
@RequestMapping(value = "/application")
public class ApplicationController {
@Autowired
@RequestMapping
public String showModules(ModuleProvider moduleProvider) {
return moduleProvider.toString();
}
}
点击两次,输出为
application.ModuleProvider@673f63cb
application.ModuleProvider@673f63cb
application.ModuleProvider@1cc4fbcb
application.ModuleProvider@57248dbf
(在第二种情况下,您应该实际看到它三次。)
@Autowired
仅在创建bean时处理,并且必须插入字段或方法
在准备ApplicationController
bean时,Spring将找到用@Autowired
注释的showModules
方法,并通过从@Configuration
类注入ModuleProvider
bean来调用它
在这之后,Spring将通过ApplicationController
的注入完成
当您随后发送请求时,SpringMVC将接管。这将完全忽略@Autowired
。默认情况下,控制器类型中带注释方法的@RequestMapping
参数由HandlerMethodArgumentResolver
处理。在这种情况下,类型为ModelAttributeMethodProcessor
(或其ServletModelAttributeMethodProcessor
子类)的实例将为类型为ModuleProvider
的参数生成参数
每次它都会创建一个新的。这些实例与ApplicationContext
完全分离。这与在处理程序方法中使用表单参数的过程相同
额外阅读:
- (在第二种情况下,您应该实际看到它三次。)
@Autowired
仅在创建bean时处理,并且必须插入字段或方法
在准备ApplicationController
bean时,Spring将找到用@Autowired
注释的showModules
方法,并通过从@Configuration
类注入ModuleProvider
bean来调用它
在这之后,Spring将通过ApplicationController
的注入完成
当您随后发送请求时,SpringMVC将接管。这将完全忽略@Autowired
。默认情况下,控制器类型中带注释方法的@RequestMapping
参数由HandlerMethodArgumentResolver
处理。在这种情况下,类型为ModelAttributeMethodProcessor
(或其ServletModelAttributeMethodProcessor
子类)的实例将为类型为ModuleProvider
的参数生成参数
每次它都会创建一个新的。这些实例与ApplicationContext
完全分离。这与在处理程序方法中使用表单参数的过程相同
额外阅读: