Spring 是否可以在运行时自动装配方法参数
Is it possible to autowire method arguments at runtime in Spring
是否可以使用 Spring 中的注解在运行时将原型作用域 bean 的新实例注入控制器的方法参数?因此,无论何时调用该方法,Spring 都会注入限定 bean 作为其参数,就像它注入 @ModelAttribute 一样。据我所知,@Autowired 字段仅在创建上下文时注入一次。从上下文的工厂方法获取 bean 不是一个选项,因为这会将框架暴露给它的组件,从而违反好莱坞原则。
我几乎读完了 Spring 的 Action book 并且已经阅读了很多 Spring 参考资料,但是还没有找到关于这个问题的任何信息。
你有几个选择。
定义一个原型 bean 并将其包装在 ObjectFactory
中
@Autowired
private ObjectFactory<PrototypeBean> factory;
然后您可以在您的处理程序方法中检索它。例如
@RequestMapping("/path")
public String handlerMethod() {
PrototypeBean instance = factory.getObject();
instance.someMethod();
return "view";
}
每次你调用factory.getObject()
,你都会得到一个新的实例。
至于直接执行此操作,不,Spring MVC 没有在调用处理程序方法时注入 bean 的内置功能,使用 @Autowired
或其他方式。
但是,HandlerMethodArgumentResolver
API 允许您为您想要的任何类型的参数定义一个实现。您可以定义一个新注释并使用它来注释适当的处理程序方法参数。该实现将查找注释并从注入的 ApplicationContext
中解析一个实例。您可以根据需要按名称、按类型执行此操作。
是否可以使用 Spring 中的注解在运行时将原型作用域 bean 的新实例注入控制器的方法参数?因此,无论何时调用该方法,Spring 都会注入限定 bean 作为其参数,就像它注入 @ModelAttribute 一样。据我所知,@Autowired 字段仅在创建上下文时注入一次。从上下文的工厂方法获取 bean 不是一个选项,因为这会将框架暴露给它的组件,从而违反好莱坞原则。
我几乎读完了 Spring 的 Action book 并且已经阅读了很多 Spring 参考资料,但是还没有找到关于这个问题的任何信息。
你有几个选择。
定义一个原型 bean 并将其包装在 ObjectFactory
@Autowired
private ObjectFactory<PrototypeBean> factory;
然后您可以在您的处理程序方法中检索它。例如
@RequestMapping("/path")
public String handlerMethod() {
PrototypeBean instance = factory.getObject();
instance.someMethod();
return "view";
}
每次你调用factory.getObject()
,你都会得到一个新的实例。
至于直接执行此操作,不,Spring MVC 没有在调用处理程序方法时注入 bean 的内置功能,使用 @Autowired
或其他方式。
但是,HandlerMethodArgumentResolver
API 允许您为您想要的任何类型的参数定义一个实现。您可以定义一个新注释并使用它来注释适当的处理程序方法参数。该实现将查找注释并从注入的 ApplicationContext
中解析一个实例。您可以根据需要按名称、按类型执行此操作。