[英]Spring Custom Converter - To Bean or Not to Bean
我正在Spring中实现Custom Converter,因此我的bean可以从java.util.Date
转换为java.time.LocalDateTime
。 我已经实现了Converter(通过实现Spring Converter
接口)
这是@Configuration
类中的bean定义
@Bean
ConversionService conversionService(){
DefaultConversionService service = new DefaultConversionService();
service.addConverter(new DateToLocalDateTimeConverter());
return service;
}
我的问题是:我应该将自定义转换器作为Java Object还是Spring Bean传递给service.addConverter
? 通常,在这种情况下是否使用bean的准则(准则)是什么?
如果您打算将此作为某种依赖项注入到您的应用程序中,并且/或者打算在多个地方重用它,那么将其注册为Bean是有意义的。 如果您不是 ,则可以new
一个实例。
依赖项注入和控制反转仅是-如何将依赖项注入应用程序,并确认您不再控制实例化的方式。 如果您需要其中任何一种,则适合使用豆子。 如果你不这样做,那么new
起来。
在您的简单情况下,似乎没有必要将DateToLocalDateTimeConverter
添加为spring bean。
将DateToLocalDateTimeConverter
添加为spring bean的原因:
conversionService()
的实现更具可读性(问题示例中不是这种情况) DateToLocalDateTimeConverter
DateToLocalDateTimeConverter
的实现本身需要注入Spring Bean,即使用@Autowired
使对象成为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());
}
}
...
}
您可以直接使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.