gpt4 book ai didi

java - 运行时通过条件进行依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-02 03:40:08 25 4
gpt4 key购买 nike

假设有以下代码:

@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
class Controller {

/* inject here */
public @NonNull GenericService service;

public void doo(List<GenericDTO> list, String type) {
service.doo(list);
}

}

class GenericDTO { ... }
class GenericService { ... }

class OfferService extends GenericService { ... }
class OtherService extends GenericService { ... }

如果 doo 方法中的 type 等于 "offer",我想注入(inject)一个 OfferService 实例到服务。如果我收到 "other",我必须使用 OtherService,依此类推。这可能吗?

最佳答案

我假设你所有的bean都是单例的。

单例 bean 都是在应用程序启动时发生的上下文初始化期间初始化和注入(inject)的,即。您的 doo 方法(我认为它是一个处理程序方法)尚未被调用。 Spring 无法猜测/知道调用某些方法的可能值是什么,或者这些值应该如何以任何方式影响目标注入(inject)点。

也许代理可以帮助确定在调用 doo 期间要获取什么真实的 bean。这很困难,因为您必须以某种方式将 type 的值暴露给执行解析的任何组件。 Spring 无法开箱即用地做到这一点。您必须编写自己的代码来执行此操作,可能需要借助您自己的 Scope 实现。 (这并非小事。)

最简单的解决方案是注入(inject)两个服务,然后在 typeif-else/switch 并相应地选择一个服务。或者将这两项服务放入 Map 中,并以 type 为键。

关于java - 运行时通过条件进行依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36921150/

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