Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring Boot中使用@Bean配置设置类属性的默认值_Java_Spring_Spring Boot_Lombok - Fatal编程技术网

Java 在Spring Boot中使用@Bean配置设置类属性的默认值

Java 在Spring Boot中使用@Bean配置设置类属性的默认值,java,spring,spring-boot,lombok,Java,Spring,Spring Boot,Lombok,我想用Lombok生成器为下面的类设置一个默认的LocalDateTime。它的值应该来自@Bean配置 @Data public class Foo { @Builder.Default LocalDateTime created = LocalDateTime.now(clock); } 这里是时钟配置。初始化对象时应设置该值: @Configuration public class TimeConfig { public f

我想用Lombok生成器为下面的类设置一个默认的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上下文中以及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());
}

这种方法有一些缺点,例如,您无法轻松地将用于测试的此时钟实例替换为某个固定时钟,因此您需要在测试中更改
创建的
字段,例如通过Foo类的构造函数来更改(

谢谢您的回答:)
@Data
public class Foo {
    @Builder.Default
    LocalDateTime created = LocalDateTime.now(ClockInstance.getInstance().getClock());
}