问题描述
service:
server:
name: name
url: url
我需要在我的应用程序中获取它。我有一个用于许多项目的模块,包括这个。它包含一个配置类,其中定义了所有项目的通用属性。它解决了这个问题。看起来像这样:
public class CommonProperties {
protected ServerProperties server;
public ServerProperties getServer() {
return server;
}
public void setServer(ServerProperties server) {
this.server = server;
}
}
服务器属性
public class ServerProperties {
protected String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
每个项目除了公共属性之外还有几个自己的属性,所以每个项目都创建自己的配置类,如下所示:
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "service")
public class ProjectProperties extends CommonProperties {
....
}
但是在这个项目中,server
比普通的 server
拥有更多的属性。这是url
。
所以我决定像这样从 ServerPropertiesExt
类继承 ServerProperties
类:
public class ServerPropertiesExt extends ServerProperties {
private String url;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
并在 ProjectProperties
中创建一个此类型的字段:
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "service")
public class ProjectProperties extends CommonProperties {
private ServerPropertiesExt server;
....
public ServerPropertiesExt getServer() {
return server;
}
public void setServer(ServerPropertiesExt server) {
this.server = server;
}
....
}
在启动应用程序后进行这样的配置,ProjectProperties.server
字段为null
,但字段ProjectProperties.super().server
填充了类型为ServerProperties
的对象。这不是我需要的,因为 ServerProperties
对象没有 String url
字段。我正好需要对象 ServerPropertiesExt
。
当我将 @Component
注释添加到 ServerPropertiesExt
类并将其自动装配到 ProjectProperties
中时,我解决了这个问题:
@Component
public class ServerPropertiesExt extends ServerProperties {
private String url;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "service")
public class ProjectProperties extends CommonProperties {
private ServerPropertiesExt server;
....
public ProjectProperties(ServerPropertiesExt server) {
this.server = server;
}
public ServerPropertiesExt getServer() {
return server;
}
public void setServer(ServerPropertiesExt server) {
this.server = server;
}
....
}
那么问题就解决了。然后 ProjectProperties.server
填充了 ServerPropertiesExt
对象,String url
字段也填充了。但是 ProjectProperties.super().server
也填充了相同的 ServerPropertiesExt
对象,其中填充了 String url
字段。
问题:它为什么有效?为什么现在字段 ProjectProperties.super().server
和 ProjectProperties.server
填充了相同的对象?在第一种情况下,ProjectProperties.super().server
填充了 ServerProperties
对象。
也许我的问题有另一种解决方案?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)