如何将参数传递给无法在 Spring 引导中自动装配的 @Component class

How to pass parameter to a @Component class which can't be autowired in Spring Boot

我正在使用 JavaFx 和 Spring Boot 构建桌面应用程序,但遇到了一些问题

我有 @Component class Translator 扩展 Task<String> 并调用 google 翻译 api我想将一个自动装配的 bean class 和一些字符串参数(例如源语言和目标语言)传递给 Translator 构造函数。

@Component
class Translator extends Task<String>{

   private TextPreprocessor textPreprocessor;
   private Stirng strUrl;
   private String from;
   private String to;
   private String text;

   public Translator(@Value("${translator.api.url}" strUrl,TextPreprocessor textPreprocessor)){
      this.strUrl=strUrl;
      this.textPreprocessor=textPreprocessor;
   }

   protected String call() throws Exception{
    //some code 
   }


}
@Component
class TextPreprocessor{
 //some code
}

所以我的问题是我需要将参数 fromtotext 传递给 Translator 构造函数,但我不能在这里这样做,因为这些变量不能自动装配.我该如何解决这个问题?

根据您的要求,class Translator 不应该属于 Spring-context,也不应该是 spring-bean。相反,似乎这个 class 应该在每次需要时由您在代码中手动实例化,以便您可以动态传递字段 fromtotext

在您将手动实例化 Translator 实例的 class 中,您可以将 strUrltextPreprocessor 自动装配为字段,以便它们始终可供您使用传递您将创建的 Translator 的新实例。

在 1 种情况下,我会将其视为 spring-bean,如果您将 fromtotext 移出此字段class 成为方法 call 的参数。通过这种方式,您可以将 Translator 作为从 Spring-context 检索到的单例,并且您可以随时使用 fromtotext 的动态值调用调用方法。

你的问题的全貌看起来像是一个设计问题。