是否可以向FactoryBean
添加非空的默认构造函数,其中参数由@Value
注入?
@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构造函数永远不会被调用...
答案 0 :(得分:1)
是, 但是你不需要构造函数参数。
相反,
您可以创建PostConstruct
方法
并在其中初始化格式化程序。
例如,
@Value("${custom.format}")
private String desiredDateFormat;
@PostConstruct
public void postConstruct()
{
formatter = DateTimeFormatter.ofPattern(desiredDateFormat);
}
选项2 (A.K.A对评论的回应)
如果您只需要value
来创建DateTimeFormatter
,
然后用它来创建一个DateTimeFormatter
“setter-like”方法,我称之为“长椅”
(因为我不知道该怎么称呼它)。
这是一些代码:
@Value("${custom.format}")
public void createDateTimeFormatter(
final String desiredDateFormat)
{
formatter = DateTimeFormatter.ofPattern(desiredDateFormat);
}