是否可以在运行时使用 Spring 中的注解将原型(prototype)作用域 bean 的新实例注入(inject) Controller 的方法参数?因此,无论何时调用该方法,Spring 都会注入(inject)限定 bean 作为其参数,就像它注入(inject) @ModelAttribute 一样。据我所知,@Autowired 字段仅在创建上下文时注入(inject)一次。从上下文的工厂方法获取 bean 不是一种选择,因为这会将框架暴露给其组件,从而违反了好莱坞原则。
我几乎读完了《Spring in Action》这本书,也读了很多《Spring Reference》,但还没有找到关于这个问题的任何信息。
最佳答案
您有几个选择。
定义一个原型(prototype) bean 并将其注入(inject) ObjectFactory
@Autowired
private ObjectFactory<PrototypeBean> factory;
然后您可以在您的处理程序方法中检索它。例如
@RequestMapping("/path")
public String handlerMethod() {
PrototypeBean instance = factory.getObject();
instance.someMethod();
return "view";
}
每次调用 factory.getObject()
时,您都会获得一个新实例。
至于直接执行此操作,不,Spring MVC 没有在使用 @Autowired
或其他方式调用处理程序方法时注入(inject) bean 的内置功能。
然而,HandlerMethodArgumentResolver
API 允许您为您想要的任何类型的参数定义一个实现。您可以定义一个新注释并使用它来注释适当的处理程序方法参数。该实现将查找注释并从注入(inject)的 ApplicationContext
中解析一个实例。您可以根据需要按名称、按类型执行此操作。
关于java - 是否可以在 Spring 运行时 Autowiring 方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34406306/