gpt4 book ai didi

java - FactoryBean 在构造函数中带有@Value?

转载 作者:行者123 更新时间:2023-12-02 11:18:25 26 4
gpt4 key购买 nike

是否可以向 FactoryBean 添加一个非空默认构造函数,其中参数由 @Value 注入(inject)?

@Service
public class DateTimeFormatterFactory implements FactoryBean<DateTimeFormatter> {
private DateTimeFormatter formatter;

@Autowired
public DateTimeFormatterFactory(@Value("${custom.format}") String format) {
formatter = DateTimeFormatter.ofPattern(format);
}

@Override
public DateTimeFormatter getObject() {
return formatter;
}

@Override
public Class<?> getObjectType() {
return DateTimeFormatter.class;
}

@Override
public boolean isSingleton() {
return true;
}
}

/edit:我应该添加错误消息。 Spring提示没有没有参数的“默认”构造函数。但如果我添加一个,那么我的 @Value 构造函数永远不会被调用...

最佳答案

是的,但您不需要为此使用构造函数参数。

相反,您可以创建一个 PostConstruct 方法并初始化其中的格式化程序。

例如,

@Value("${custom.format}")
private String desiredDateFormat;

@PostConstruct
public void postConstruct()
{
formatter = DateTimeFormatter.ofPattern(desiredDateFormat);
}

选项 2(又名对评论的回复)

如果您只需要来创建DateTimeFormatter,然后用它来创建 DateTimeFormatter我将其称为“settee”的“类似 setter”的方法(因为我不知道该叫它什么)。这是一些代码:

@Value("${custom.format}")
public void createDateTimeFormatter(
final String desiredDateFormat)
{
formatter = DateTimeFormatter.ofPattern(desiredDateFormat);
}

关于java - FactoryBean 在构造函数中带有@Value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50102052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com