You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在@Service的Setter方法中注入@Value并实例化DateTimeFormatter?

当然可以!问题出在注入的写法上

你的思路是对的——可以把@Value注入到@Service类的Setter方法中,但当前代码里Spring没有触发这个Setter的调用,是因为你没明确告诉Spring这是一个需要执行注入的方法。下面给你几种可行的解决方案:

方案1:给Setter方法加上@Autowired

在Setter方法上添加@Autowired,让Spring识别这是一个依赖注入方法,同时保留参数上的@Value:

@Service
public class DateService {
    private DateTimeFormatter dtf;

    @Autowired
    public void setDtf(@Value("${spring.jackson.date-format}") String format) {
        dtf = DateTimeFormatter.ofPattern(format);
    }
}

方案2:把@Value直接放在Setter方法上

另一种写法是将@Value标注在Setter方法本身,Spring会自动解析配置值并传入参数:

@Service
public class DateService {
    private DateTimeFormatter dtf;

    @Value("${spring.jackson.date-format}")
    public void setDtf(String format) {
        dtf = DateTimeFormatter.ofPattern(format);
    }
}

更推荐的方案:构造器注入(Spring官方推荐)

其实还有一种更优雅的方式——用构造器注入结合@Value,这种方式能保证你的Bean不可变(字段设为final),还更利于单元测试,也是Spring官方推荐的依赖注入方式:

@Service
public class DateService {
    private final DateTimeFormatter dtf;

    public DateService(@Value("${spring.jackson.date-format}") String format) {
        this.dtf = DateTimeFormatter.ofPattern(format);
    }
}

额外注意点

  • 确保你的配置文件(application.properties/application.yml)中确实存在spring.jackson.date-format配置项,如果可能不存在,可以给@Value设置默认值,避免启动报错:
    @Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")
    
  • 原来的代码之所以没生效,是因为Spring不会主动调用一个普通的public Setter方法,必须通过@Autowired或直接在方法上标注@Value,明确告知Spring这是需要执行注入的方法。

内容的提问来源于stack exchange,提问作者membersound

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:46:43