我们实际上使用Spring Boot的@ConfigurationProperties
作为配置映射器:它为我们提供了一个简单的快捷方式来映射对象的属性。
@ConfigurationProperties("my.service")
public class MyService {
private String filePrefix;
private Boolean coefficient;
private Date beginDate;
// getters/setters mandatory at the time of writing
public void doBusinessStuff() {
// ...
}
}
虽然当我们对应用程序进行原型设计时,这是一个很好的生产力提升,但我们开始质疑这是否正确使用。
我的意思是,配置属性在Spring Boot的上下文中具有不同的状态,它们通过执行器端点公开,它们可用于触发条件bean,并且似乎更倾向于技术配置属性。
问题:对任何商业财产/价值使用此机制是否“正确”,还是明显滥用?
我们错过了任何潜在的缺点?
现在我们唯一担心的是我们不能在不可变类上使用@ConfigurationProperties
,这与Spring Boot的跟踪器上的这个问题密切相关:Allow field based @ConfigurationProperties binding
答案 0 :(得分:1)
如果您的属性代表可根据环境/配置文件配置的内容,那么该机制就是其中的内容。虽然我有点不清楚你的意思 "映射对象的特性"。
我一般不喜欢这种风格,特别是如果你的bean有多个要设置的属性。更标准的习惯用法是拥有一个封装用于创建bean的属性/设置的类:
@ConfigurationProperties("my.service")
public class MyServiceProperties {
private String filePrefix;
private Boolean coefficient;
private Date beginDate;
// getters/setters mandatory at the time of writing
}
然后你的Service类看起来像这样:
@EnableConfigurationProperties(MyServiceProperties.class)
public class MyService {
@Autowired
private MyServiceProperties properties;
//do stuff with properties
public void doBusinessStuff() {
// ...
}
}
这至少可以让你通过它的构造函数轻松地将属性传递给不可变类(制作任何可变属性的副本)。如果您发现应用的其他部分需要一些共享配置,那么也可以重用属性bean。