自己做的网站怎么放视频,wordpress文章专辑,外国网站快速申请qq,小程序平台服务协议【Spring连载】使用Spring Data访问 MongoDB----对象映射之属性转换器 一、声明式值转换器二、编程式值转换器注册三、MongoCustomConversions配置 虽然基于类型的转换已经提供了影响目标存储中某些类型的转换和表示的方法#xff0c;但当仅考虑特定类型的某些值或属性进行转换… 【Spring连载】使用Spring Data访问 MongoDB----对象映射之属性转换器 一、声明式值转换器二、编程式值转换器注册三、MongoCustomConversions配置 虽然基于类型的转换已经提供了影响目标存储中某些类型的转换和表示的方法但当仅考虑特定类型的某些值或属性进行转换时它会受到限制。基于属性的转换器允许以声明方式通过ValueConverter或编程方式通过为特定属性注册PropertyValueConverter按每个属性配置转换规则。 PropertyValueConverter可以将给定值转换为其存储表示形式写入和返回读取如下所示。额外的ValueConversionContext提供了额外的信息例如映射元数据和直接读写方法。 例1一个简单的PropertyValueConverter class ReversingValueConverter implements PropertyValueConverterString, String, ValueConversionContext {Overridepublic String read(String value, ValueConversionContext context) {return reverse(value);}Overridepublic String write(String value, ValueConversionContext context) {return reverse(value);}
}你可以通过委托给PropertyValueConversions通常通过使用PropertyValueConverterFactory来提供实际的转换器从CustomConversions#getPropertyValueConverter(…)获得PropertyValueConverter实例。根据应用程序的需要可以链接chain或装饰decoratePropertyValueConverterFactory的多个实例 — 例如应用caching。默认情况下Spring Data MongoDB使用缓存实现该实现可以为具有默认构造函数或枚举值的类型提供服务。一组预定义的工厂可通过PropertyValueConverterFactory中的工厂方法获得。你可以使用PropertyValueConverterFactory.beanFactoryAware(…)从ApplicationContext获取PropertyValueConverter实例。 你可以通过ConverterConfiguration更改默认行为。
一、声明式值转换器
PropertyValueConverter最直接的用法是用ValueConverter注释属性该注释定义了转换器类型:例2声明式PropertyValueConverter
class Person {ValueConverter(ReversingValueConverter.class)String ssn;
}二、编程式值转换器注册
编程式注册通过使用PropertyValueConverterRegistrar为实体模型中的属性注册PropertyValueConverter实例如下面的示例所示。声明性注册和编程式注册的区别在于编程式注册完全发生在实体模型之外。如果不能或不想注解实体模型这种方法很有用。 例3编程式PropertyValueConverter注册
PropertyValueConverterRegistrar registrar new PropertyValueConverterRegistrar();registrar.registerConverter(Address.class, street, new PropertyValueConverter() { … }); --------1// type safe registration
registrar.registerConverter(Person.class, Person::getSsn()) --------2.writing(value - encrypt(value)).reading(value - decrypt(value));1. 为由其名称标识的字段注册一个转换器。
2. 允许注册转换器及其转换函数的类型安全变量。此方法使用类代理来确定属性。确保类和访问器都不是final否则此方法不起作用。在注册转换器时不支持通过点表示法如registerConverter(Person.class, “address.street”, …)将属性转换为子文档。MongoValueConverter提供了一个预类型化的PropertyValueConverter接口它使用了MongoConversionContext。
三、MongoCustomConversions配置
默认情况下MongoCustomConversions可以处理声明式值转换器具体取决于配置的PropertyValueConverterFactory。MongoConverterConfigurationAdapter帮助设置可编程的值转换或定义要使用的PropertyValueConverterFactory。 例4:配置示例
MongoCustomConversions.create(configurationAdapter - {SimplePropertyValueConversions valueConversions new SimplePropertyValueConversions();valueConversions.setConverterFactory(…);valueConversions.setValueConverterRegistry(new PropertyValueConverterRegistrar().registerConverter(…).buildRegistry());configurationAdapter.setPropertyValueConversions(valueConversions);
});