gpt4 book ai didi

java - 如何在非组件类中实例化服务类

转载 作者:行者123 更新时间:2023-12-04 15:24:59 26 4
gpt4 key购买 nike

我有我的服务类,它会进行后期调用。我想实例化那个 bean/ Autowiring 它以在另一个不是组件或配置类的类中创建一个对象。

@Service
public class SavePayload {

// Rest Post Call implementation

}



public class PayloadRecord
implements Record {

private String payload;

PayloadProcessor payloadProcessor = new PayloadProcessor();

public PayloadRecord(String payload) {
this.payload = payload;
}

@SneakyThrows
@Override
public boolean isValid() throws ValidationException {
payloadProcessor.savePayload(payload);
return true;
}

@Override
public byte[] getBytes(Charset charset) {
return payload.getBytes(StandardCharsets.UTF_8);
}

@Override
public String getID() {
return payload;
}


@Override
public String toString() {
return payload;
}

private static class PayloadProcessor {

@Autowired
private SavePayload savePayload;

}

}


我正在使用一个模板来进行记录处理。一旦我收到消息,我就会将它分配给非组件类的有效负载记录中的有效负载。我想初始化 SavePayload 服务。保存有效负载服务返回 null。

最佳答案

创建一个应用程序上下文感知类,以便您可以获取当前上下文,例如:

@Component
public class ContextAwareClass implements ApplicationContextAware {

private static ApplicationContext ctx;

public static ApplicationContext getApplicationContext() {
return ctx;
}

@Override
public void setApplicationContext(ApplicationContext applicationContext) {
ctx = applicationContext;
}
}

然后,只需获取上下文并获取 bean,如下所示:
public class YourRegularNoSpringComponentClass {

public void doSomething() {
System.out.println(ContextAwareClass
.getApplicationContext()
.getBean("savePayload")
);
}
}

如果 bean 存在于您的上下文中,则上面将打印该 bean。在您的情况下,您可以简单地使用它而不是打印它。

希望这可以帮助!

关于java - 如何在非组件类中实例化服务类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62457390/

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