如何将参数传递给无法在 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
}
所以我的问题是我需要将参数 from
、to
和 text
传递给 Translator 构造函数,但我不能在这里这样做,因为这些变量不能自动装配.我该如何解决这个问题?
根据您的要求,class Translator
不应该属于 Spring-context
,也不应该是 spring-bean
。相反,似乎这个 class 应该在每次需要时由您在代码中手动实例化,以便您可以动态传递字段 from
、to
、text
。
在您将手动实例化 Translator
实例的 class 中,您可以将 strUrl
和 textPreprocessor
自动装配为字段,以便它们始终可供您使用传递您将创建的 Translator
的新实例。
在 1 种情况下,我会将其视为 spring-bean
,如果您将 from
、to
、text
移出此字段class 成为方法 call
的参数。通过这种方式,您可以将 Translator
作为从 Spring-context
检索到的单例,并且您可以随时使用 from
、to
、text
的动态值调用调用方法。
你的问题的全貌看起来像是一个设计问题。
我正在使用 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
}
所以我的问题是我需要将参数 from
、to
和 text
传递给 Translator 构造函数,但我不能在这里这样做,因为这些变量不能自动装配.我该如何解决这个问题?
根据您的要求,class Translator
不应该属于 Spring-context
,也不应该是 spring-bean
。相反,似乎这个 class 应该在每次需要时由您在代码中手动实例化,以便您可以动态传递字段 from
、to
、text
。
在您将手动实例化 Translator
实例的 class 中,您可以将 strUrl
和 textPreprocessor
自动装配为字段,以便它们始终可供您使用传递您将创建的 Translator
的新实例。
在 1 种情况下,我会将其视为 spring-bean
,如果您将 from
、to
、text
移出此字段class 成为方法 call
的参数。通过这种方式,您可以将 Translator
作为从 Spring-context
检索到的单例,并且您可以随时使用 from
、to
、text
的动态值调用调用方法。
你的问题的全貌看起来像是一个设计问题。