gpt4 book ai didi

java - 如何使用@Configuration定义运行时配置?

转载 作者:行者123 更新时间:2023-12-02 04:38:07 27 4
gpt4 key购买 nike

我对 Spring 还很陌生,所以请耐心等待,如果您认为有必要,请随时建议使用正确的链接进行更多阅读。我正在使用一个类来定义我将调用的不同 Rest 端点的连接设置(用户名端口等)。所以我正在考虑将它们存储到 application.properties 中,如下所示:

twitter.username="a"
twitter.password="b"
twitter.host="www.twitter.com"
facebook.username="c"
facebok.password="d"
facebook.host="www.facebook.com"

现在我想定义一个类,它将采用所有前缀(例如“twitter”或“facebook”)并根据 applicaton.properties 中的相应属性返回配置类。

我正在考虑做类似以下的事情:

@Configuration    
@PropertySource("classpath:application.properties")
public class RESTConfiguration
{

class RESTServer{
public String username;
public String password;
public String host;
private RESTServer(String username, String password, String host)
{
this.username = username;
this.password = password;
this.host = host;
}

}
@Autowied
private String ednpointName;

@Bean
public RESTServer restServer(Environment env)
{
return new RESTServer(env.getProperty(ednpointName + ".user"),
env.getProperty(ednpointName + ".password"),
env.getProperty(ednpointName+".host"));
}
}

但它显然行不通,因为只有一个 Bean,而且我没有办法传递多个端点名称。帮助表示感谢!

最佳答案

更好的方法是使用工厂设计模式。大致如下:

@Configuration
@PropertySource("classpath:application.properties")
public class RESTConfiguration
{
@Bean
public RESTServerFactory restServer()
{
return new RESTServerFactory()
}
}

public class RESTServer {
public String username;
public String password;
public String host;
private RESTServer(String username, String password, String host)
{
this.username = username;
this.password = password;
this.host = host;
}
}

public class RESTServerFactory {
@Autowired Environment env;

public RESTServer getRESTServer(String endpointName)
{
return new RESTServer(env.getProperty(ednpointName + ".username"),
env.getProperty(ednpointName + ".password"),
env.getProperty(ednpointName+".host"));
}
}

使用该工厂的示例:

@Autowired RESTServerFactory factory;

public RESTServer createServer(String endpoint) {
return factory.getRESTServer(endpoint);
}

关于java - 如何使用@Configuration定义运行时配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30517876/

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