[英]How to instantiate a service class in a non component class
我有我的服務 class ,它會進行后期通話。 我想實例化那個bean/自動裝配它以在另一個class中創建一個object,它不是一個組件或配置class。
@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;
}
}
我正在使用將進行記錄處理的模板。 收到消息后,我將其分配給 Payload Record 中的 Payload,這是非組件 class。 我想初始化 SavePayload 服務。 保存負載服務返回 null。
創建一個應用程序上下文感知 class 以便您可以獲取當前上下文,例如:
@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。 在您的情況下,您將簡單地使用它而不是打印它。
希望這可以幫助!
您將必須創建 ApplicationContext 的實例
您可以探索 AnnotationConfigApplicationContext applicationContext= new AnnotationConfigApplicationContext();
然后使用。 SavePayload savePayload = applicationContext.getBean("savePayload");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.