我在Spring中实现自定义转换器,因此我的bean可以从java.util.Date
转换为java.time.LocalDateTime
。我已经实现了Converter(通过实现Spring Converter
接口)
这是@Configuration
类
@Bean
ConversionService conversionService(){
DefaultConversionService service = new DefaultConversionService();
service.addConverter(new DateToLocalDateTimeConverter());
return service;
}
我的问题是:我应该将自定义转换器作为Java对象或Spring Bean传递给service.addConverter
吗?
一般来说,在这种情况下,bean是否为bean的准则(标准)是什么?
答案 0 :(得分:1)
如果您打算将此作为某种依赖项注入您的应用程序,和/或您打算在多个位置重用它,那么将它注册为bean是有意义的。如果您不,则可以接受new
实例。
依赖注入和控制反转就是这样 - 你如何将依赖注入你的应用程序,并确认你不再控制实例化的方式。如果您想要其中任何一种,豆类是合适的;如果你没有,那么new
就可以了。
答案 1 :(得分:1)
在简单的情况下,似乎没有必要将DateToLocalDateTimeConverter
添加为spring bean。
将DateToLocalDateTimeConverter
添加为spring bean的原因:
conversionService()
的实现更具可读性(不是问题示例中的情况)DateToLocalDateTimeConverter
DateToLocalDateTimeConverter
本身的实现需要注入Spring bean,即使用@Autowired
答案 2 :(得分:0)
使对象成为一个Spring Bean是有意义的,因为你希望这个对象可以从Spring功能(注入,事务,aop等等)中受益。
在您的情况下,似乎不需要。
由于conversionService
是一个将被实例化的Spring bean单例,在实例化期间创建DateToLocalDateTimeConverter
的普通java实例似乎很好:new DateToLocalDateTimeConverter()
。
现在,如果以后想要在其他Spring bean中注入DateToLocalDateTimeConverter
实例,那么将它转换为Spring Bean是有意义的。
有关信息,Spring在Jsr310Converters
类中提供了此实用程序任务(包含在spring-data-commons依赖项中):
import static java.time.LocalDateTime.*;
public abstract class Jsr310Converters {
...
public static enum DateToLocalDateTimeConverter implements Converter<Date, LocalDateTime> {
INSTANCE;
@Override
public LocalDateTime convert(Date source) {
return source == null ? null : ofInstant(source.toInstant(), ZoneId.systemDefault());
}
}
...
}
你可以直接使用它。