是否可以在Spring中在运行时自动装配方法参数

时间:2015-12-21 23:50:00

标签: java spring dependency-injection inversion-of-control autowired

是否可以在运行时使用Spring中的注释将新的原型范围bean实例注入Controller的方法参数?因此,无论何时调用该方法,Spring都会将限定bean作为其参数注入,因为它会注入@ModelAttribute。据我所知,@Autowired字段只在创建上下文时注入一次。从上下文的工厂方法中获取bean不是一种选择,因为这会将框架暴露给它的组件,从而违反了好莱坞原则。

我几乎已经阅读了Spring in Action一书,并且一直在阅读Spring Reference,但是没有找到关于这个问题的任何信息。

1 个答案:

答案 0 :(得分:1)

你有几个选择。

定义一个原型bean并注入包裹在@Autowired private ObjectFactory<PrototypeBean> factory;

中的bean
@RequestMapping("/path")
public String handlerMethod() {
    PrototypeBean instance = factory.getObject();
    instance.someMethod();
    return "view";
}

然后,您可以在处理程序方法中检索它。例如

factory.getObject()

每次拨打@Autowired,您都会获得一个新实例。

至于直接这样做,不,Spring MVC没有内置功能,可以在调用处理程序方法时使用ApplicationContext或其他方式注入bean。

但是,self-contained gist API允许您为所需的任何类型的参数定义实现。您可以定义新注释并使用它来注释相应的处理程序方法参数。实现将查找注释并从注入的function( date, cell ) { } 解析实例。您可以按名称,按类型执行此操作,但您可以这样做。

相关问题