gpt4 book ai didi

java - 如何将 Spring 上下文作为方法参数传递?

转载 作者:太空宇宙 更新时间:2023-11-04 10:07:24 24 4
gpt4 key购买 nike

我需要一些有关 Spring 的帮助(SpringBoot 1.3.2.RELEASE、Spring 4.3.11.RELEASE)。用例比较特殊,需要解释。

我有一个 Spring 应用程序来管理客户发送的请求。为了处理这些请求,我们需要使用通过@Autowired注释声明的服务。非常经典。

最近,我们决定处理来自其他国家/地区的新类型请求。重点是,为了面对不同的情况和类型的请求,我们决定实现一种策略模式。-> 根据请求的类型,我们执行在运行时选择的策略。每个策略都包含在一个具体的类中,并且所有策略共享相同的接口(interface)。

所以,我有:

  • 一个主类,其中请求处理已完全完成。为了完成它的工作,此类用于调用一些使用 @Autowired 注释声明的服务。

现在我有:

  • 一个主类,其中仅初始化请求处理。去做它的工作是,此类将根据某些标准在运行时实例化单个策略。
  • 一个具有 2 个方法的 IStrategy(接口(interface))将被实现通过我的 2 个具体类(class)
  • 2 个具体类(以及更多即将推出的类)可以完成这项工作。 非常重要的一点是,这些具体类将在加载 Spring 上下文之后在运行时实例化。

问题在于,加载 Spring 上下文后,无法再使用 @Autowired 注解。我想在具体策略类中使用的所有服务都不能再被 @Autowired 调用并保持为 NULL。

我找到了一种解决方法,将我需要的服务作为参数传递给我的具体策略类,但我必须作为参数传递的服务数量因策略而异。

我认为我应该传递整个 Spring 上下文,但我不知道该怎么做。而且我也不知道如何从上下文访问所有带注释的服务。

PS:我没有显示代码行,因为我认为实际上没有必要。如果您认为用代码更明确,我会发送一些。

提前致谢。

最佳答案

您应该声明一个工厂来映射依赖项,而不是将服务声明为 bean,它会在将服务的具体实例返回给注入(inject)器之前检查请求。看看这里:

https://grokonez.com/spring-framework/spring-core/use-spring-factory-method-create-spring-bean

关于java - 如何将 Spring 上下文作为方法参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52763808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com