簡體   English   中英

如何在非組件 class 中實例化服務 class

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM