首页 > 解决方案 > 使用 @Configuration 访问 Spring Boot 应用程序中的配置

问题描述

我正在创建一个自定义反序列化器类,该类需要在我的 Spring Boot 应用程序中读取一些自定义配置。我的课看起来有点像这样:

@Configuration
public class ItemDeserializer extends StdDeserializer<Item> { 
 
    @Value("${config.name}")
    private String nameConfig;

    public ItemDeserializer() { 
        this(null); 
    } 
 
    public ItemDeserializer(Class<?> vc) { 
        super(vc); 
    }
 
    @Override
    public Item deserialize(JsonParser jp, DeserializationContext ctxt) 
      throws IOException, JsonProcessingException {
        JsonNode node = jp.getCodec().readTree(jp);
        
        //read in item name based on configuration value
        String itemName = node.get(nameConfig).asText();
 
        return new Item(itemName);
    }
}

我在 Item 类上调用它,如下所示:

@JsonDeserialize(using = ItemDeserializer.class)
public class Item {
      private String itemName;

      //getters and setters
}

nameConfig字段永远不会使用适当的配置值进行设置。添加@Configuration 可以在我的应用程序的其他部分使用,但这些类包括@Bean 注释和其他我怀疑是必要的东西。我怎样才能注释这个类以使其工作?

标签: javaspringspring-boot

解决方案


解决方案是SpringBeanAutowiringSupport如果您使用的是 Spring Framework 2.5+。

public class ItemDeserializer extends StdDeserializer<Item> { 
 
    @Value("${config.name}")
    private String nameConfig;

    public ItemDeserializer() { 
        this(null); 
    } 
 
    public ItemDeserializer(Class<?> vc) { 
     super(vc);        
     SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);    
        
    }
 
    @Override
    public Item deserialize(JsonParser jp, DeserializationContext ctxt) 
      throws IOException, JsonProcessingException {
        JsonNode node = jp.getCodec().readTree(jp);
        
        //read in item name based on configuration value
        String itemName = node.get(nameConfig).asText();
 
        return new Item(itemName);
    }
}

推荐阅读