原文在这里:
你真的会用Enum吗(4)-集成SpringBoot
自定义Enum共有四篇,本篇为第四篇。前面我们已经实现了把浏览器的参数映射成自定义的枚举,并且把枚举保存到数据库,本篇来看下如果是SpringBoot该如何来做。
测试代码还是跟之前的一样,就不重复发了,请参考:你真的会用Enum吗(2)-集成SpringMVC 你真的会用Enum吗(3)-集成Mybatis
(1)添加扫描Enum的配置类,跟之前的一样:
@EnumComponentScan(basePackages="com.github.xjs.sbdemo.enums")
@Configuration
public class EnumScanConfig {
(2)注册EnumConverterFactory,之前是在xml中配置的conversionService,现在换成配置类:
@Configuration
public class MvcConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverterFactory(new EnumConverterFactory());
(3)添加ObjectMapper用于序列化和反序列化的配置类,之前是在xml中配置的objectMapper:
@Configuration
public class EnumObjectMapperConfig {
@SuppressWarnings({ "rawtypes", "unchecked" })
@Bean
public SimpleModule serializeEnumModule() {
SimpleModule module = new SimpleModule();
EnumSerializer enumSerializer = new EnumSerializer();
List enumClasses =EnumFactory.getAllEnumClass();
for(Object enumClass : enumClasses) {
Class clazz = (Class)enumClass;
module.addSerializer(clazz,enumSerializer);
return module;
@SuppressWarnings({ "rawtypes", "unchecked" })
@Bean
public SimpleModule deserializeEnumModule() {
SimpleModule module = new SimpleModule();
EnumDeserializer enumDeserializer = new EnumDeserializer();
List enumClasses =EnumFactory.getAllEnumClass();
for(Object enumClass : enumClasses) {
Class clazz = (Class)enumClass;
module.addDeserializer(clazz, enumDeserializer);
return module;
数据库部分修改如下:
首先在application.properties中添加配置:
#datasource
spring.datasource.url=jdbc:sqlite:employees.db
spring.datasource.driver-class-name=org.sqlite.JDBC
#mybatis
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.mapperLocations = classpath:com/github/xjs/sbdemo/dao/*.xml
这里我们选用sqlite数据库,其他数据库同理。
然后添加SqlSessionFactory的配置类,基本上把MybatisAutoConfiguration的代码复制一份过来就可以了,这里还是使用之前的EnumSqlSessionFactory :
@org.springframework.context.annotation.Configuration
public class EnumSqlSessionFactoryConfig {
@Autowired
private MybatisProperties properties;
@Autowired
private ResourceLoader resourceLoader;
@Autowired
ObjectProvider<List<ConfigurationCustomizer>> configurationCustomizersProvider;
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
EnumSqlSessionFactory factory = new EnumSqlSessionFactory();
factory.setDataSource(dataSource);
if (StringUtils.hasText(this.properties.getConfigLocation())) {
factory.setConfigLocation(this.resourceLoader.getResource(this.properties.getConfigLocation()));
Configuration configuration = this.properties.getConfiguration();
if (configuration == null && !StringUtils.hasText(this.properties.getConfigLocation())) {
configuration = new Configuration();
List<ConfigurationCustomizer> configurationCustomizers = this.configurationCustomizersProvider.getIfAvailable();
if (configuration != null && !CollectionUtils.isEmpty(configurationCustomizers)) {
for (ConfigurationCustomizer customizer : configurationCustomizers) {
customizer.customize(configuration);
if (!ObjectUtils.isEmpty(this.properties.resolveMapperLocations())) {
factory.setMapperLocations(this.properties.resolveMapperLocations());
return factory.getObject();
完整的源代码在:https://github.com/xjs1919/enumdemo/ 下面的springbootdemo。
如果感觉对你有用,欢迎打赏点赞加关注。
原文在这里:你真的会用Enum吗(4)-集成SpringBoot自定义Enum共有四篇,本篇为第四篇。前面我们已经实现了把浏览器的参数映射成自定义的枚举,并且把枚举保存到数据库,本篇来看下如果是SpringBoot该如何来做。测试代码还是跟之前的一样,就不重复发了,请参考:你真的会用Enum吗(2)-集成SpringMVC 你真的会用Enum吗(3)-集成Mybatis(1)添加扫描En...
public abstract class JsonSerializer<T> implements JsonFormatVisitable{
/**********************************************************
/* Fluent factory methods for constructing deco...
最近在处理一个hessian的反序列化问题时,因为服务端使用了pojo bean中多了一个enum属性,导致客户端在反序列化时疯狂的在打印日志。警告说找不到对应的enum class,因为项目中本身是设置了log4j的根输出为一个文件。
比较奇怪的是,hessian对应的日志输出全都打印到了控制台(虽然我们对console进行了重定向输出),导致对应的文件达到几百...
在学习Spring源码的过程中看到,在ClassPathBeanDefinitionScanner中看到spring通过扫描给定的包路径,获取到对应的class资源并判断是否生成BeanDefinition注册到IOC容器中,在这里也进行写了一个Demo记录下学习。
在我们开发的过程中,为了解决硬编码问题我们通常都会把一些类型的数据进行封装成字典然后存入数据库,这的确是一个好的办法,可以规范我们的开发,也大大减少了后期修改维护的成本。
但是也存在此类的问题,我们在开发中也常常会使用到这些类型,那如果
enum34-1.1.10.tar.gz是一个Python库,提供了对Python3.4中枚举类型的支持。由于旧版本的Python没有枚举类型,所以这个库提供了一个向后兼容的方法,在旧版本的Python中使用枚举类型。
这个库支持Python3.4及以上版本,提供了Enum类和unique装饰器。Enum类可以用来定义枚举类型,它为每个枚举成员提供了一个唯一的名称和值,并且支持比较、哈希和枚举成员的迭代。unique装饰器可以用来确保枚举成员的值是唯一的。
使用enum34库可以使Python代码更易读、更易理解。枚举类型在表达某些概念时非常有用,比如颜色、方向、状态等。在编写代码时,使用枚举类型可以使代码更具可读性,减少出错的可能性。例如,我们可以使用枚举类型来表示一个人的职业:
from enum import Enum
class Profession(Enum):
PROGRAMMER = 1
DOCTOR = 2
TEACHER = 3
我们可以看到,使用枚举类型可以使代码更加清晰易懂,而且可以避免一些不必要的错误。
总之,enum34-1.1.10.tar.gz是一个很有用的Python库,可以为Python程序员提供更好的编程体验。它提供了对枚举类型的支持,使得我们可以更加直观、简洁地表达数据。