Java 是否可以在Spring的运行时自动连接方法参数
是否可以在运行时使用Spring中的注释将原型作用域bean的新实例注入控制器的方法参数?因此,每当调用该方法时,Spring都会注入限定bean作为其参数,就像它注入@ModelAttribute一样。据我所知,@Autowired字段在创建上下文时只注入一次。从上下文的工厂方法获取bean不是一个选项,因为这样会将框架暴露给它的组件,从而违反好莱坞原则Java 是否可以在Spring的运行时自动连接方法参数,java,spring,dependency-injection,inversion-of-control,autowired,Java,Spring,Dependency Injection,Inversion Of Control,Autowired,是否可以在运行时使用Spring中的注释将原型作用域bean的新实例注入控制器的方法参数?因此,每当调用该方法时,Spring都会注入限定bean作为其参数,就像它注入@ModelAttribute一样。据我所知,@Autowired字段在创建上下文时只注入一次。从上下文的工厂方法获取bean不是一个选项,因为这样会将框架暴露给它的组件,从而违反好莱坞原则 我几乎已经读完了《Spring in Action》一书,并且已经阅读了很多Spring参考资料,但是还没有找到关于这个问题的任何信息。您有
我几乎已经读完了《Spring in Action》一书,并且已经阅读了很多Spring参考资料,但是还没有找到关于这个问题的任何信息。您有几个选择 定义一个原型bean并注入封装在
ObjectFactory
@Autowired
private ObjectFactory<PrototypeBean> factory;
每次调用factory.getObject()
,都会得到一个新实例
至于直接执行此操作,不,Spring MVC没有内置的特性,在调用处理程序方法时使用@Autowired
或其他方式注入bean
但是,API允许您为所需的任何类型的参数定义实现。您可以定义一个新的注释,并使用它来注释适当的处理程序方法参数。实现将从注入的
ApplicationContext
中查找注释并解析实例。您可以按名称、按类型执行此操作,但是您需要。为什么要在那里注入原型?这似乎是一种代码气味。(如果它真的合理,您可以始终注入工厂而不是生成的bean。)我将ObjectFactory
与@modeldattribute
组合在一起,它可以正常工作,谢谢。我还发现了另一个JSR标准接口,名为Provider
。我甚至发现了@Lookup
,但感觉有点不直观。我进一步试验了HandlerMethodArgumentResolver
,最终在声明它为组件后,它就可以正常工作了,这样我就可以将它与上下文绑定了,然后在WebMVCConfigureAdapter
中将自动连线实例手动添加到解析程序列表中。它是遗留类,或者为什么我不能将它定义为一个bean,让Spring检测它并将它集成到它的基础设施中,比如ViewResolver等等?
@RequestMapping("/path")
public String handlerMethod() {
PrototypeBean instance = factory.getObject();
instance.someMethod();
return "view";
}