gpt4 book ai didi

java - 如何在 Spring Boot 中通过 post 调用注入(inject)依赖项?

转载 作者:行者123 更新时间:2023-12-02 10:39:32 25 4
gpt4 key购买 nike

我有一个后映射,它将映射到一个配置文件。配置文件包含我想要注入(inject)依赖项的某些参数。对于每个配置文件,我想注入(inject)一组完全不同的实现。有了 guice,我可以通过将模块属性添加到我的配置文件中来做到这一点,并在收到配置文件时创建该 guice 模块,并且其他依赖项注入(inject)由 guice 负责。

public class GuiceModule extends AbstractModule {
public GuiceModule(Profile profile) {
super(profile);
}
@Override
protected void configureModule() {
bind(Bean1.class).toProvider(Bean1Impl.class);
bind(Bean2.class).to(Bean2Impl.class);
bind(Bean3.class).to(Bean3Impl.class);
bind(Bean4.class).to(Bean4Impl.class);
bind(Bean5.class).to(Bean5Imple.class);
bind(ParentBean.class).to(ParentBeanImpl.class);
}

@Override
public void configure() {
this.configureModule();
}
}

在我的 Controller 中

@PostMapping(path = "/profiles/add" , consumes = "application/json")
void addProfile(@RequestBody Profile profile)
{
//with guice
Injector injector = Guice.getInjector(Class.forName(profile.getModule));
injector.getInstance(ParentBean.class).execute();
}

但是使用 spring-boot 无法找到如何实现这一点。
更新每次我在帖子调用中收到新的配置文件时,我是否可以创建一个新的 AnnotationConfigApplicationContext。代码将如下所示。

@PostMapping(path = "/profiles/add" , consumes = "application/json")
void addProfile(@RequestBody Profile profile)
{
String clazz = profile.getConfigurationClass();
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Class.forName(clazz)); //This will create a new IoC container with its own beans.
ParentBean bean = context.getBean(ParentBean.class)
bean.execute()
}

这可行,但我不确定这是否是一个好的做法。

最佳答案

在问题中,尚不清楚哪个参数决定服务调用。假设它是某个枚举,那么您可以保留一个以枚举作为键、以 Autowiring 服务作为值的映射。现在根据该参数,您可以调用不同的实现。

@PostMapping(path = "/profiles/add" , consumes = "application/json")
void addProfile(@RequestBody Profile profile)
{
Object service = this.map.get("your_field");
service.yourMethod(profile);
}

关于java - 如何在 Spring Boot 中通过 post 调用注入(inject)依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53028745/

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