Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以在Spring的运行时自动连接方法参数_Java_Spring_Dependency Injection_Inversion Of Control_Autowired - Fatal编程技术网

Java 是否可以在Spring的运行时自动连接方法参数

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中的注释将原型作用域bean的新实例注入控制器的方法参数?因此,每当调用该方法时,Spring都会注入限定bean作为其参数,就像它注入@ModelAttribute一样。据我所知,@Autowired字段在创建上下文时只注入一次。从上下文的工厂方法获取bean不是一个选项,因为这样会将框架暴露给它的组件,从而违反好莱坞原则


我几乎已经读完了《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";
}