[英]Set default value of class property with @Bean configuration in Spring Boot
我想使用 Lombok Builder 為以下類設置默認的 LocalDateTime。 它的值應該來自@Bean 配置。
@Data
public class Foo {
@Builder.Default
LocalDateTime created = LocalDateTime.now(clock);
}
這里是時鍾配置。 該值應在對象初始化時設置:
@Configuration
public class TimeConfig {
public final static String TIME_ZONE = "UTC";
@Bean
public Clock clock() {
TimeZone.setDefault(TimeZone.getTimeZone(TIME_ZONE));
return Clock.systemUTC();
}
}
我想要實現的是使用當前時鍾自動設置創建時間戳。 時鍾具有用於測試的靜態值。 我怎樣才能使這項工作?
如果您需要在 spring 上下文和外部(在 lombok 中)使用此時鍾配置實例,那么我將這樣做:首先通過靜態持有者模式創建一個具有配置時區的時鍾單例
public class ClockInstance {
public final static String TIME_ZONE = "UTC";
static {
TimeZone.setDefault(TimeZone.getTimeZone(TIME_ZONE));
}
public Clock getClock(){
return Clock.systemUTC();
}
private ClockInstance() {
}
private static class Holder {
private static final ClockInstance INSTANCE = new ClockInstance();
}
public static ClockInstance getInstance() {
return Holder.INSTANCE;
}
}
然后在你的 spring 配置中使用這個時鍾實例
@Configuration
public class TimeConfig {
@Bean
public Clock clock() {
return ClockInstance.getInstance().getClock();
}
}
你將能夠在你的 Foo 類中使用這個正確的時鍾配置
@Data
public class Foo {
@Builder.Default
LocalDateTime created = LocalDateTime.now(ClockInstance.getInstance().getClock());
}
這種方法有一些缺點,例如你不能輕易地將這個用於測試的時鍾實例替換為某個固定時鍾,因此你需要在測試中更改created
字段,例如通過 Foo 類的構造函數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.